seleniumbase 4.33.8__py3-none-any.whl → 4.33.9__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.33.8"
2
+ __version__ = "4.33.9"
@@ -600,6 +600,7 @@ def uc_open_with_cdp_mode(driver, url=None):
600
600
  cdp.find_element = CDPM.find_element
601
601
  cdp.find = CDPM.find_element
602
602
  cdp.locator = CDPM.find_element
603
+ cdp.find_element_by_text = CDPM.find_element_by_text
603
604
  cdp.find_all = CDPM.find_all
604
605
  cdp.find_elements_by_text = CDPM.find_elements_by_text
605
606
  cdp.select = CDPM.select
@@ -167,6 +167,57 @@ class CDPMethods():
167
167
  self.__slow_mode_pause_if_set()
168
168
  return element
169
169
 
170
+ def find_element_by_text(
171
+ self, text, tag_name=None, timeout=settings.SMALL_TIMEOUT
172
+ ):
173
+ """Returns an element by matching text.
174
+ Optionally, provide a tag_name to narrow down the search to an
175
+ element with the given tag. (Eg: a, button, div, script, span)"""
176
+ self.__add_light_pause()
177
+ time_now = time.time()
178
+ self.assert_text(text, timeout=timeout)
179
+ spent = int(time.time() - time_now)
180
+ remaining = 1 + timeout - spent
181
+ if tag_name:
182
+ self.assert_element(tag_name, timeout=remaining)
183
+ elements = self.loop.run_until_complete(
184
+ self.page.find_elements_by_text(text=text)
185
+ )
186
+ if tag_name:
187
+ tag_name = tag_name.lower().strip()
188
+ for element in elements:
189
+ if element and not tag_name:
190
+ element = self.__add_sync_methods(element)
191
+ return self.__add_sync_methods(element)
192
+ elif (
193
+ element
194
+ and tag_name in element.tag_name.lower()
195
+ and text.strip() in element.text
196
+ ):
197
+ element = self.__add_sync_methods(element)
198
+ return self.__add_sync_methods(element)
199
+ elif (
200
+ element.parent
201
+ and tag_name in element.parent.tag_name.lower()
202
+ and text.strip() in element.parent.text
203
+ ):
204
+ element = self.__add_sync_methods(element.parent)
205
+ return self.__add_sync_methods(element)
206
+ elif (
207
+ element.parent.parent
208
+ and tag_name in element.parent.parent.tag_name.lower()
209
+ and text.strip() in element.parent.parent.text
210
+ ):
211
+ element = self.__add_sync_methods(element.parent.parent)
212
+ return self.__add_sync_methods(element)
213
+ plural = "s"
214
+ if timeout == 1:
215
+ plural = ""
216
+ raise Exception(
217
+ "Text {%s} with tag {%s} was not found after %s second%s!"
218
+ % (text, tag_name, timeout, plural)
219
+ )
220
+
170
221
  def find_all(self, selector, timeout=settings.SMALL_TIMEOUT):
171
222
  self.__add_light_pause()
172
223
  selector = self.__convert_to_css_if_xpath(selector)
@@ -177,26 +228,48 @@ class CDPMethods():
177
228
  for element in elements:
178
229
  element = self.__add_sync_methods(element)
179
230
  updated_elements.append(element)
180
- self.__slow_mode_pause_if_set()
181
231
  return updated_elements
182
232
 
183
233
  def find_elements_by_text(self, text, tag_name=None):
184
234
  """Returns a list of elements by matching text.
185
- Optionally, provide a tag_name to narrow down the search
186
- to only elements with the given tag. (Eg: a, div, script, span)"""
235
+ Optionally, provide a tag_name to narrow down the search to only
236
+ elements with the given tag. (Eg: a, button, div, script, span)"""
187
237
  self.__add_light_pause()
188
238
  elements = self.loop.run_until_complete(
189
239
  self.page.find_elements_by_text(text=text)
190
240
  )
191
241
  updated_elements = []
242
+ if tag_name:
243
+ tag_name = tag_name.lower().strip()
192
244
  for element in elements:
193
- if (
194
- not tag_name
195
- or tag_name.lower().strip() in element.tag_name.lower().strip()
245
+ if element and not tag_name:
246
+ element = self.__add_sync_methods(element)
247
+ if element not in updated_elements:
248
+ updated_elements.append(element)
249
+ elif (
250
+ element
251
+ and tag_name in element.tag_name.lower()
252
+ and text.strip() in element.text
196
253
  ):
197
254
  element = self.__add_sync_methods(element)
198
- updated_elements.append(element)
199
- self.__slow_mode_pause_if_set()
255
+ if element not in updated_elements:
256
+ updated_elements.append(element)
257
+ elif (
258
+ element.parent
259
+ and tag_name in element.parent.tag_name.lower()
260
+ and text.strip() in element.parent.text
261
+ ):
262
+ element = self.__add_sync_methods(element.parent)
263
+ if element not in updated_elements:
264
+ updated_elements.append(element)
265
+ elif (
266
+ element.parent.parent
267
+ and tag_name in element.parent.parent.tag_name.lower()
268
+ and text.strip() in element.parent.parent.text
269
+ ):
270
+ element = self.__add_sync_methods(element.parent.parent)
271
+ if element not in updated_elements:
272
+ updated_elements.append(element)
200
273
  return updated_elements
201
274
 
202
275
  def select(self, selector, timeout=settings.SMALL_TIMEOUT):
@@ -244,7 +317,6 @@ class CDPMethods():
244
317
  for element in elements:
245
318
  element = self.__add_sync_methods(element)
246
319
  updated_elements.append(element)
247
- self.__slow_mode_pause_if_set()
248
320
  return updated_elements
249
321
 
250
322
  def find_elements(self, selector, timeout=settings.SMALL_TIMEOUT):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.33.8
3
+ Version: 4.33.9
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -75,7 +75,7 @@ Requires-Dist: mycdp>=1.1.0
75
75
  Requires-Dist: pynose>=1.5.3
76
76
  Requires-Dist: platformdirs>=4.3.6
77
77
  Requires-Dist: typing-extensions>=4.12.2
78
- Requires-Dist: sbvirtualdisplay>=1.3.0
78
+ Requires-Dist: sbvirtualdisplay>=1.3.1
79
79
  Requires-Dist: six>=1.17.0
80
80
  Requires-Dist: parse>=1.20.2
81
81
  Requires-Dist: parse-type>=0.6.4
@@ -3,7 +3,7 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
3
3
  sbase/steps.py,sha256=_WvAjydKqZfTdnZW9LPKkRty-g-lfdUPmLqnZj6ulcs,43013
4
4
  seleniumbase/__init__.py,sha256=OtJh8nGKL4xtZpw8KPqmn7Q6R-86t4cWUDyVF5MbMTo,2398
5
5
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
6
- seleniumbase/__version__.py,sha256=rd7NUV3t0KKsPu_LnXrJlAcYzq8npXhiWbpSgIR17LE,46
6
+ seleniumbase/__version__.py,sha256=GMboHPCu6gSyY9eX_O3aXtEMziJZxOjCp0x23YIYBQo,46
7
7
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
9
9
  seleniumbase/behave/behave_sb.py,sha256=-hza7Nx2U41mSObYiPMi48v3JlPh3sJO3yzP0kqZ1Gk,59174
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
36
36
  seleniumbase/console_scripts/sb_recorder.py,sha256=fnHb5-kh11Hit-E9Ha-e4QXzqLcZvtij6mb5qNd4B1Q,11032
37
37
  seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
39
- seleniumbase/core/browser_launcher.py,sha256=FvcxXqCiE4yelqDBQjXVY4b7UubfzhI67IIWvjJMDe4,224583
39
+ seleniumbase/core/browser_launcher.py,sha256=FSnNzrnE52lXvpLToDRm2Isr4280xf7Vax_L_oTgDuY,224640
40
40
  seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
41
41
  seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
42
42
  seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
@@ -50,7 +50,7 @@ seleniumbase/core/proxy_helper.py,sha256=kZnfkflB3XhuL2h-3inmx3UOLS8VAZ385BGCc4H
50
50
  seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
51
51
  seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
52
52
  seleniumbase/core/s3_manager.py,sha256=bkeI8I4y19ebWuQG1oEZV5qJbotC6eN8vin31OCNWJk,3521
53
- seleniumbase/core/sb_cdp.py,sha256=zFFpaQZTBpjMLhVX_Ll9hOqKnZLJstTgmiU8-LFbvwo,70647
53
+ seleniumbase/core/sb_cdp.py,sha256=UB6pDr9qIMq1ExIxtfMRzQe6CZ-fnS1JNLiS2QvYfdk,73720
54
54
  seleniumbase/core/sb_driver.py,sha256=NGa4adi8OAi2WFtFkEguXg3JCd1p-JuZweIpGNifEfU,13488
55
55
  seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
56
56
  seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
@@ -135,9 +135,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPr
135
135
  seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
136
136
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
138
- seleniumbase-4.33.8.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
139
- seleniumbase-4.33.8.dist-info/METADATA,sha256=ZVgDox3MKzCN1oVyAWbfy8UuHNqF6JRsygiFvUjAGYE,86528
140
- seleniumbase-4.33.8.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
141
- seleniumbase-4.33.8.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
- seleniumbase-4.33.8.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
- seleniumbase-4.33.8.dist-info/RECORD,,
138
+ seleniumbase-4.33.9.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
139
+ seleniumbase-4.33.9.dist-info/METADATA,sha256=cjZQgqFZM5v2JHJhH5_69a99phccxOgf6B8ofQm8WtM,86528
140
+ seleniumbase-4.33.9.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
141
+ seleniumbase-4.33.9.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
+ seleniumbase-4.33.9.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
+ seleniumbase-4.33.9.dist-info/RECORD,,