Skip to content

Commit 9d7112e

Browse files
authored
Merge pull request #571 from seleniumbase/more-translations
Update the Universal Translator API
2 parents 4353637 + 94cae54 commit 9d7112e

File tree

15 files changed

+571
-88
lines changed

15 files changed

+571
-88
lines changed

help_docs/method_summary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ self.wait_for_ready_state_complete(timeout=None)
180180
self.wait_for_angularjs(timeout=None)
181181

182182
self.sleep(seconds)
183+
# Duplicates: self.wait(seconds)
183184

184185
self.activate_jquery()
185186

@@ -435,8 +436,10 @@ self.assert_partial_link_text(partial_link_text, timeout=None)
435436
############
436437

437438
self.wait_for_element_absent(selector, by=By.CSS_SELECTOR, timeout=None)
439+
# Duplicates: self.wait_for_element_not_present(selector, by=By.CSS_SELECTOR)
438440

439441
self.assert_element_absent(selector, by=By.CSS_SELECTOR, timeout=None)
442+
# Duplicates: self.assert_element_not_present(selector, by=By.CSS_SELECTOR)
440443

441444
############
442445

requirements.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pip>=20.1
22
setuptools>=44.1.0;python_version<"3.5"
3-
setuptools>=46.2.0;python_version>="3.5"
3+
setuptools>=46.3.0;python_version>="3.5"
44
setuptools-scm>=3.5.0
55
wheel>=0.34.2
66
six==1.14.0
@@ -13,7 +13,7 @@ requests==2.23.0
1313
selenium==3.141.0
1414
pluggy==0.13.1
1515
attrs>=19.3.0
16-
pytest==4.6.9;python_version<"3.5"
16+
pytest==4.6.10;python_version<"3.5"
1717
pytest==5.4.2;python_version>="3.5"
1818
pytest-cov==2.8.1
1919
pytest-forked==1.1.3
@@ -41,8 +41,10 @@ coverage==5.1
4141
pyotp==2.3.0
4242
boto==2.49.0
4343
cffi==1.14.0
44-
flake8==3.7.9
45-
pyflakes==2.1.1
44+
flake8==3.7.9;python_version<"3.5"
45+
flake8==3.8.1;python_version>="3.5"
46+
pyflakes==2.1.1;python_version<"3.5"
47+
pyflakes==2.2.0;python_version>="3.5"
4648
certifi>=2020.4.5.1
4749
pdfminer.six==20191110;python_version<"3.5"
4850
pdfminer.six==20200402;python_version>="3.5"

seleniumbase/common/encryption.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ def blend_strings(string1, string2):
7171
return new_string
7272

7373

74-
def rotate(l, n):
75-
return l[n:] + l[:n]
74+
def rotate(string, n):
75+
return string[n:] + string[:n]
7676

7777

7878
def ord_string_sum(string):

seleniumbase/fixtures/base_case.py

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@ def double_click(self, selector, by=By.CSS_SELECTOR, timeout=None):
200200
timeout = settings.SMALL_TIMEOUT
201201
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
202202
timeout = self.__get_new_timeout(timeout)
203-
if page_utils.is_xpath_selector(selector):
204-
by = By.XPATH
203+
selector, by = self.__recalculate_selector(selector, by)
205204
element = page_actions.wait_for_element_visible(
206205
self.driver, selector, by, timeout=timeout)
207206
self.__demo_mode_highlight_if_active(selector, by)
@@ -265,8 +264,7 @@ def update_text(self, selector, new_value, by=By.CSS_SELECTOR,
265264
timeout = settings.LARGE_TIMEOUT
266265
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
267266
timeout = self.__get_new_timeout(timeout)
268-
if page_utils.is_xpath_selector(selector):
269-
by = By.XPATH
267+
selector, by = self.__recalculate_selector(selector, by)
270268
element = self.wait_for_element_visible(
271269
selector, by=by, timeout=timeout)
272270
self.__demo_mode_highlight_if_active(selector, by)
@@ -336,8 +334,7 @@ def add_text(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
336334
timeout = settings.LARGE_TIMEOUT
337335
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
338336
timeout = self.__get_new_timeout(timeout)
339-
if page_utils.is_xpath_selector(selector):
340-
by = By.XPATH
337+
selector, by = self.__recalculate_selector(selector, by)
341338
element = self.wait_for_element_visible(
342339
selector, by=by, timeout=timeout)
343340
self.__demo_mode_highlight_if_active(selector, by)
@@ -379,8 +376,7 @@ def add_text(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
379376

380377
def submit(self, selector, by=By.CSS_SELECTOR):
381378
""" Alternative to self.driver.find_element_by_*(SELECTOR).submit() """
382-
if page_utils.is_xpath_selector(selector):
383-
by = By.XPATH
379+
selector, by = self.__recalculate_selector(selector, by)
384380
element = self.wait_for_element_visible(
385381
selector, by=by, timeout=settings.SMALL_TIMEOUT)
386382
element.submit()
@@ -733,8 +729,7 @@ def get_text(self, selector, by=By.CSS_SELECTOR, timeout=None):
733729
timeout = settings.SMALL_TIMEOUT
734730
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
735731
timeout = self.__get_new_timeout(timeout)
736-
if page_utils.is_xpath_selector(selector):
737-
by = By.XPATH
732+
selector, by = self.__recalculate_selector(selector, by)
738733
self.wait_for_ready_state_complete()
739734
time.sleep(0.01)
740735
element = page_actions.wait_for_element_visible(
@@ -1857,8 +1852,7 @@ def bring_to_front(self, selector, by=By.CSS_SELECTOR):
18571852
Useful when getting a WebDriverException, such as the one below:
18581853
{ Element is not clickable at point (#, #).
18591854
Other element would receive the click: ... } """
1860-
if page_utils.is_xpath_selector(selector):
1861-
by = By.XPATH
1855+
selector, by = self.__recalculate_selector(selector, by)
18621856
self.wait_for_element_visible(
18631857
selector, by=by, timeout=settings.SMALL_TIMEOUT)
18641858
try:
@@ -2444,8 +2438,7 @@ def choose_file(self, selector, file_path, by=By.CSS_SELECTOR,
24442438
timeout = settings.LARGE_TIMEOUT
24452439
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
24462440
timeout = self.__get_new_timeout(timeout)
2447-
if page_utils.is_xpath_selector(selector):
2448-
by = By.XPATH
2441+
selector, by = self.__recalculate_selector(selector, by)
24492442
abs_path = os.path.abspath(file_path)
24502443
self.add_text(selector, abs_path, by=by, timeout=timeout)
24512444

@@ -2724,8 +2717,7 @@ def set_value(self, selector, new_value, by=By.CSS_SELECTOR, timeout=None):
27242717
timeout = settings.LARGE_TIMEOUT
27252718
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
27262719
timeout = self.__get_new_timeout(timeout)
2727-
if page_utils.is_xpath_selector(selector):
2728-
by = By.XPATH
2720+
selector, by = self.__recalculate_selector(selector, by)
27292721
orginal_selector = selector
27302722
css_selector = self.convert_to_css_selector(selector, by=by)
27312723
self.__demo_mode_highlight_if_active(orginal_selector, by)
@@ -2766,8 +2758,7 @@ def jquery_update_text(self, selector, new_value, by=By.CSS_SELECTOR,
27662758
timeout = settings.LARGE_TIMEOUT
27672759
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
27682760
timeout = self.__get_new_timeout(timeout)
2769-
if page_utils.is_xpath_selector(selector):
2770-
by = By.XPATH
2761+
selector, by = self.__recalculate_selector(selector, by)
27712762
element = self.wait_for_element_visible(
27722763
selector, by=by, timeout=timeout)
27732764
self.__demo_mode_highlight_if_active(selector, by)
@@ -2899,8 +2890,7 @@ def type(self, selector, text, by=By.CSS_SELECTOR,
28992890
timeout = settings.LARGE_TIMEOUT
29002891
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
29012892
timeout = self.__get_new_timeout(timeout)
2902-
if page_utils.is_xpath_selector(selector):
2903-
by = By.XPATH
2893+
selector, by = self.__recalculate_selector(selector, by)
29042894
self.update_text(selector, text, by=by, timeout=timeout, retry=retry)
29052895

29062896
def input(self, selector, text, by=By.CSS_SELECTOR,
@@ -2910,8 +2900,7 @@ def input(self, selector, text, by=By.CSS_SELECTOR,
29102900
timeout = settings.LARGE_TIMEOUT
29112901
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
29122902
timeout = self.__get_new_timeout(timeout)
2913-
if page_utils.is_xpath_selector(selector):
2914-
by = By.XPATH
2903+
selector, by = self.__recalculate_selector(selector, by)
29152904
self.update_text(selector, text, by=by, timeout=timeout, retry=retry)
29162905

29172906
def write(self, selector, text, by=By.CSS_SELECTOR,
@@ -2921,8 +2910,7 @@ def write(self, selector, text, by=By.CSS_SELECTOR,
29212910
timeout = settings.LARGE_TIMEOUT
29222911
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
29232912
timeout = self.__get_new_timeout(timeout)
2924-
if page_utils.is_xpath_selector(selector):
2925-
by = By.XPATH
2913+
selector, by = self.__recalculate_selector(selector, by)
29262914
self.update_text(selector, text, by=by, timeout=timeout, retry=retry)
29272915

29282916
def send_keys(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
@@ -2931,8 +2919,7 @@ def send_keys(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
29312919
timeout = settings.LARGE_TIMEOUT
29322920
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
29332921
timeout = self.__get_new_timeout(timeout)
2934-
if page_utils.is_xpath_selector(selector):
2935-
by = By.XPATH
2922+
selector, by = self.__recalculate_selector(selector, by)
29362923
self.add_text(selector, text, by=by, timeout=timeout)
29372924

29382925
def click_link(self, link_text, timeout=None):
@@ -2954,6 +2941,37 @@ def wait_for_element_visible(self, selector, by=By.CSS_SELECTOR,
29542941
return page_actions.wait_for_element_visible(
29552942
self.driver, selector, by, timeout)
29562943

2944+
def wait_for_element_not_present(self, selector, by=By.CSS_SELECTOR,
2945+
timeout=None):
2946+
""" Same as self.wait_for_element_absent()
2947+
Waits for an element to no longer appear in the HTML of a page.
2948+
A hidden element still counts as appearing in the page HTML.
2949+
If an element with "hidden" status is acceptable,
2950+
use wait_for_element_not_visible() instead. """
2951+
if not timeout:
2952+
timeout = settings.LARGE_TIMEOUT
2953+
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
2954+
timeout = self.__get_new_timeout(timeout)
2955+
selector, by = self.__recalculate_selector(selector, by)
2956+
return page_actions.wait_for_element_absent(
2957+
self.driver, selector, by, timeout)
2958+
2959+
def assert_element_not_present(self, selector, by=By.CSS_SELECTOR,
2960+
timeout=None):
2961+
""" Same as self.assert_element_absent()
2962+
Will raise an exception if the element stays present.
2963+
Returns True if successful. Default timeout = SMALL_TIMEOUT. """
2964+
if not timeout:
2965+
timeout = settings.SMALL_TIMEOUT
2966+
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
2967+
timeout = self.__get_new_timeout(timeout)
2968+
self.wait_for_element_absent(selector, by=by, timeout=timeout)
2969+
return True
2970+
2971+
def wait(self, seconds):
2972+
""" Same as sleep() - Some JS frameworks use this method name. """
2973+
self.sleep(seconds)
2974+
29572975
def _print(self, msg):
29582976
print(msg)
29592977

@@ -3161,6 +3179,9 @@ def add_tour_step(self, message, selector=None, name=None,
31613179
"""
31623180
if not selector:
31633181
selector = "html"
3182+
if page_utils.is_name_selector(selector):
3183+
name = page_utils.get_name_from_selector(selector)
3184+
selector = '[name="%s"]' % name
31643185
if page_utils.is_xpath_selector(selector):
31653186
selector = self.convert_to_css_selector(selector, By.XPATH)
31663187
selector = self.__escape_quotes_if_needed(selector)
@@ -3860,8 +3881,7 @@ def wait_for_element_absent(self, selector, by=By.CSS_SELECTOR,
38603881
timeout = settings.LARGE_TIMEOUT
38613882
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
38623883
timeout = self.__get_new_timeout(timeout)
3863-
if page_utils.is_xpath_selector(selector):
3864-
by = By.XPATH
3884+
selector, by = self.__recalculate_selector(selector, by)
38653885
return page_actions.wait_for_element_absent(
38663886
self.driver, selector, by, timeout)
38673887

seleniumbase/translate/chinese.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ def 断言元素(self, *args, **kwargs):
5353
# assert_element(selector)
5454
return self.assert_element(*args, **kwargs)
5555

56+
def 断言元素可见(self, *args, **kwargs):
57+
# assert_element_visible(selector) # Same as self.assert_element()
58+
return self.assert_element_visible(*args, **kwargs)
59+
60+
def 断言元素不可见(self, *args, **kwargs):
61+
# assert_element_not_visible(selector)
62+
return self.assert_element_not_visible(*args, **kwargs)
63+
64+
def 断言元素存在(self, *args, **kwargs):
65+
# assert_element_present(selector)
66+
return self.assert_element_present(*args, **kwargs)
67+
68+
def 断言元素不存在(self, *args, **kwargs):
69+
# assert_element_absent(selector)
70+
return self.assert_element_absent(*args, **kwargs)
71+
5672
def 断言标题(self, *args, **kwargs):
5773
# assert_title(title)
5874
return self.assert_title(*args, **kwargs)
@@ -113,14 +129,30 @@ def 等待元素(self, *args, **kwargs):
113129
# wait_for_element(selector)
114130
return self.wait_for_element(*args, **kwargs)
115131

132+
def 等待元素可见(self, *args, **kwargs):
133+
# wait_for_element_visible(selector) # Same as wait_for_element()
134+
return self.wait_for_element_visible(*args, **kwargs)
135+
136+
def 等待元素不可见(self, *args, **kwargs):
137+
# wait_for_element_not_visible(selector)
138+
return self.wait_for_element_not_visible(*args, **kwargs)
139+
116140
def 等待元素存在(self, *args, **kwargs):
117141
# wait_for_element_present(selector)
118142
return self.wait_for_element_present(*args, **kwargs)
119143

144+
def 等待元素不存在(self, *args, **kwargs):
145+
# wait_for_element_absent(selector)
146+
return self.wait_for_element_absent(*args, **kwargs)
147+
120148
def (self, *args, **kwargs):
121149
# sleep(seconds)
122150
return self.sleep(*args, **kwargs)
123151

152+
def 等待(self, *args, **kwargs):
153+
# wait(seconds) # Same as sleep(seconds)
154+
return self.wait(*args, **kwargs)
155+
124156
def 提交(self, *args, **kwargs):
125157
# submit(selector)
126158
return self.submit(*args, **kwargs)

seleniumbase/translate/dutch.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ def controleren_element(self, *args, **kwargs):
5353
# assert_element(selector)
5454
return self.assert_element(*args, **kwargs)
5555

56+
def controleren_element_zichtbaar(self, *args, **kwargs):
57+
# assert_element_visible(selector) # Same as self.assert_element()
58+
return self.assert_element_visible(*args, **kwargs)
59+
60+
def controleren_element_niet_zichtbaar(self, *args, **kwargs):
61+
# assert_element_not_visible(selector)
62+
return self.assert_element_not_visible(*args, **kwargs)
63+
64+
def controleren_element_aanwezig(self, *args, **kwargs):
65+
# assert_element_present(selector)
66+
return self.assert_element_present(*args, **kwargs)
67+
68+
def controleren_element_afwezig(self, *args, **kwargs):
69+
# assert_element_absent(selector)
70+
return self.assert_element_absent(*args, **kwargs)
71+
5672
def controleren_titel(self, *args, **kwargs):
5773
# assert_title(title)
5874
return self.assert_title(*args, **kwargs)
@@ -105,22 +121,38 @@ def element_aanwezig(self, *args, **kwargs):
105121
# is_element_present(selector)
106122
return self.is_element_present(*args, **kwargs)
107123

108-
def wacht_op_tekst(self, *args, **kwargs):
124+
def wachten_op_tekst(self, *args, **kwargs):
109125
# wait_for_text(text, selector)
110126
return self.wait_for_text(*args, **kwargs)
111127

112-
def wacht_op_element(self, *args, **kwargs):
128+
def wachten_op_element(self, *args, **kwargs):
113129
# wait_for_element(selector)
114130
return self.wait_for_element(*args, **kwargs)
115131

116-
def wacht_op_element_aanwezig(self, *args, **kwargs):
132+
def wachten_op_element_zichtbaar(self, *args, **kwargs):
133+
# wait_for_element_visible(selector) # Same as wait_for_element()
134+
return self.wait_for_element_visible(*args, **kwargs)
135+
136+
def wachten_op_element_niet_zichtbaar(self, *args, **kwargs):
137+
# wait_for_element_not_visible(selector)
138+
return self.wait_for_element_not_visible(*args, **kwargs)
139+
140+
def wachten_op_element_aanwezig(self, *args, **kwargs):
117141
# wait_for_element_present(selector)
118142
return self.wait_for_element_present(*args, **kwargs)
119143

144+
def wachten_op_element_afwezig(self, *args, **kwargs):
145+
# wait_for_element_absent(selector)
146+
return self.wait_for_element_absent(*args, **kwargs)
147+
120148
def slapen(self, *args, **kwargs):
121149
# sleep(seconds)
122150
return self.sleep(*args, **kwargs)
123151

152+
def wachten(self, *args, **kwargs):
153+
# wait(seconds) # Same as sleep(seconds)
154+
return self.wait(*args, **kwargs)
155+
124156
def verzenden(self, *args, **kwargs):
125157
# submit(selector)
126158
return self.submit(*args, **kwargs)
@@ -229,15 +261,15 @@ def klik_zichtbare_elementen(self, *args, **kwargs):
229261
# click_visible_elements(selector)
230262
return self.click_visible_elements(*args, **kwargs)
231263

232-
def optie_selecteren_per_tekst(self, *args, **kwargs):
264+
def optie_selecteren_op_tekst(self, *args, **kwargs):
233265
# select_option_by_text(dropdown_selector, option)
234266
return self.select_option_by_text(*args, **kwargs)
235267

236-
def optie_selecteren_per_index(self, *args, **kwargs):
268+
def optie_selecteren_op_index(self, *args, **kwargs):
237269
# select_option_by_index(dropdown_selector, option)
238270
return self.select_option_by_index(*args, **kwargs)
239271

240-
def optie_selecteren_per_waarde(self, *args, **kwargs):
272+
def optie_selecteren_op_waarde(self, *args, **kwargs):
241273
# select_option_by_value(dropdown_selector, option)
242274
return self.select_option_by_value(*args, **kwargs)
243275

0 commit comments

Comments
 (0)