Skip to content

Commit 5055312

Browse files
authored
Merge pull request #691 from seleniumbase/add-expected-methods
Add expected methods
2 parents 18422d3 + c49201c commit 5055312

File tree

14 files changed

+167
-5
lines changed

14 files changed

+167
-5
lines changed

help_docs/method_summary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ self.add_text(selector, text, by=By.CSS_SELECTOR, timeout=None)
3333

3434
self.submit(selector, by=By.CSS_SELECTOR)
3535

36+
self.clear(selector, by=By.CSS_SELECTOR, timeout=None)
37+
3638
self.refresh_page()
3739
# Duplicates: self.refresh(), self.reload(), self.reload_page()
3840

@@ -319,6 +321,7 @@ self.set_value(selector, text, by=By.CSS_SELECTOR, timeout=None)
319321

320322
self.js_update_text(selector, text, by=By.CSS_SELECTOR, timeout=None)
321323
# Duplicates: self.js_type(selector, text, by=By.CSS_SELECTOR, timeout=None)
324+
# self.set_text(selector, text, by=By.CSS_SELECTOR, timeout=None)
322325

323326
self.jquery_update_text(selector, text, by=By.CSS_SELECTOR, timeout=None)
324327

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ ipython==6.5.0;python_version>="3.5" and python_version<"3.6"
5353
ipython==7.16.1;python_version>="3.6" and python_version<"3.7"
5454
ipython==7.18.1;python_version>="3.7"
5555
colorama==0.4.3
56-
pymysql==0.10.0
56+
pymysql==0.10.1
5757
coverage==5.2.1
5858
brython==3.8.10
5959
pyotp==2.4.0

seleniumbase/fixtures/base_case.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,46 @@ def submit(self, selector, by=By.CSS_SELECTOR):
441441
element.submit()
442442
self.__demo_mode_pause_if_active()
443443

444+
def clear(self, selector, by=By.CSS_SELECTOR, timeout=None):
445+
""" This method clears an element's text field.
446+
A clear() is already included with most methods that type text,
447+
such as self.type(), self.update_text(), etc.
448+
Does not use Demo Mode highlights, mainly because we expect
449+
that some users will be calling an unnecessary clear() before
450+
calling a method that already includes clear() as part of it.
451+
In case websites trigger an autofill after clearing a field,
452+
add backspaces to make sure autofill doesn't undo the clear.
453+
@Params
454+
selector - the selector of the text field
455+
by - the type of selector to search by (Default: CSS Selector)
456+
timeout - how long to wait for the selector to be visible
457+
"""
458+
if not timeout:
459+
timeout = settings.LARGE_TIMEOUT
460+
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
461+
timeout = self.__get_new_timeout(timeout)
462+
selector, by = self.__recalculate_selector(selector, by)
463+
element = self.wait_for_element_visible(
464+
selector, by=by, timeout=timeout)
465+
self.scroll_to(selector, by=by, timeout=timeout)
466+
try:
467+
element.clear()
468+
backspaces = Keys.BACK_SPACE * 42 # Autofill Defense
469+
element.send_keys(backspaces)
470+
except (StaleElementReferenceException, ENI_Exception):
471+
self.wait_for_ready_state_complete()
472+
time.sleep(0.06)
473+
element = self.wait_for_element_visible(
474+
selector, by=by, timeout=timeout)
475+
element.clear()
476+
try:
477+
backspaces = Keys.BACK_SPACE * 42 # Autofill Defense
478+
element.send_keys(backspaces)
479+
except Exception:
480+
pass
481+
except Exception:
482+
element.clear()
483+
444484
def refresh_page(self):
445485
self.__last_page_load_url = None
446486
js_utils.clear_out_console_logs(self.driver)
@@ -3115,6 +3155,29 @@ def js_type(self, selector, text, by=By.CSS_SELECTOR,
31153155
except Exception:
31163156
pass
31173157

3158+
def set_text(self, selector, text, by=By.CSS_SELECTOR, timeout=None):
3159+
""" Same as self.js_update_text()
3160+
JavaScript + send_keys are used to update a text field.
3161+
Performs self.set_value() and triggers event listeners.
3162+
If text ends in "\n", set_value() presses RETURN after.
3163+
Works faster than send_keys() alone due to the JS call. """
3164+
if not timeout:
3165+
timeout = settings.LARGE_TIMEOUT
3166+
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
3167+
timeout = self.__get_new_timeout(timeout)
3168+
selector, by = self.__recalculate_selector(selector, by)
3169+
if type(text) is int or type(text) is float:
3170+
text = str(text)
3171+
self.set_value(
3172+
selector, text, by=by, timeout=timeout)
3173+
if not text.endswith('\n'):
3174+
try:
3175+
element = page_actions.wait_for_element_present(
3176+
self.driver, selector, by, timeout=0.2)
3177+
element.send_keys(" \b")
3178+
except Exception:
3179+
pass
3180+
31183181
def jquery_update_text(self, selector, text, by=By.CSS_SELECTOR,
31193182
timeout=None):
31203183
""" This method uses jQuery to update a text field.

seleniumbase/translate/chinese.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def 提交(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def 清除(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def JS单击(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def 查找文本(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def 设置文本(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def 获取属性(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)

seleniumbase/translate/dutch.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def verzenden(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def wissen(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def js_klik(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def vind_tekst(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def tekst_instellen(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def kenmerk_ophalen(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)
@@ -476,7 +484,7 @@ def schrijven(self, *args, **kwargs):
476484
# write(selector, text) # Same as update_text()
477485
return self.write(*args, **kwargs)
478486

479-
def kenmerk_thema_van_bericht(self, *args, **kwargs):
487+
def thema_van_bericht_instellen(self, *args, **kwargs):
480488
# set_messenger_theme(theme="default", location="default")
481489
return self.set_messenger_theme(*args, **kwargs)
482490

seleniumbase/translate/french.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def soumettre(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def effacer(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def js_cliquer(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def trouver_texte(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def définir_texte(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def obtenir_attribut(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)

seleniumbase/translate/italian.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def inviare(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def cancellare(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def js_fare_clic(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def trovare_testo(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def impostare_testo(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def ottenere_attributo(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)

seleniumbase/translate/japanese.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def を提出す(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def クリアする(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def JSクリックして(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def テキストを見つける(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def テキストを設定する(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def 属性を取得する(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)

seleniumbase/translate/korean.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ def 제출(self, *args, **kwargs):
177177
# submit(selector)
178178
return self.submit(*args, **kwargs)
179179

180+
def 지우려면(self, *args, **kwargs):
181+
# clear(selector)
182+
return self.clear(*args, **kwargs)
183+
180184
def JS_클릭(self, *args, **kwargs):
181185
# js_click(selector)
182186
return self.js_click(*args, **kwargs)
@@ -460,6 +464,10 @@ def 텍스트_찾기(self, *args, **kwargs):
460464
# find_text(text, selector="html") # Same as wait_for_text
461465
return self.find_text(*args, **kwargs)
462466

467+
def 텍스트_설정(self, *args, **kwargs):
468+
# set_text(selector, text)
469+
return self.set_text(*args, **kwargs)
470+
463471
def 특성_검색(self, *args, **kwargs):
464472
# get_attribute(selector, attribute)
465473
return self.get_attribute(*args, **kwargs)

seleniumbase/translate/master_dict.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,18 @@ class MD:
731731
md["submit"][8] = "отправить"
732732
md["submit"][9] = "enviar"
733733

734+
md["clear"] = ["*"] * num_langs
735+
md["clear"][0] = "clear"
736+
md["clear"][1] = "清除"
737+
md["clear"][2] = "wissen"
738+
md["clear"][3] = "effacer"
739+
md["clear"][4] = "cancellare"
740+
md["clear"][5] = "クリアする"
741+
md["clear"][6] = "지우려면"
742+
md["clear"][7] = "limpar"
743+
md["clear"][8] = "очистить"
744+
md["clear"][9] = "despejar"
745+
734746
md["js_click"] = ["*"] * num_langs
735747
md["js_click"][0] = "js_click"
736748
md["js_click"][1] = "JS单击"
@@ -1548,6 +1560,18 @@ class MD:
15481560
md["find_text"][8] = "найти_текст"
15491561
md["find_text"][9] = "encontrar_texto"
15501562

1563+
md["set_text"] = ["*"] * num_langs
1564+
md["set_text"][0] = "set_text"
1565+
md["set_text"][1] = "设置文本"
1566+
md["set_text"][2] = "tekst_instellen"
1567+
md["set_text"][3] = "définir_texte"
1568+
md["set_text"][4] = "impostare_testo"
1569+
md["set_text"][5] = "テキストを設定する"
1570+
md["set_text"][6] = "텍스트_설정"
1571+
md["set_text"][7] = "definir_texto"
1572+
md["set_text"][8] = "набор_текст"
1573+
md["set_text"][9] = "establecer_texto"
1574+
15511575
md["get_attribute"] = ["*"] * num_langs
15521576
md["get_attribute"][0] = "get_attribute"
15531577
md["get_attribute"][1] = "获取属性"
@@ -1611,7 +1635,7 @@ class MD:
16111635
md["set_messenger_theme"] = ["*"] * num_langs
16121636
md["set_messenger_theme"][0] = "set_messenger_theme"
16131637
md["set_messenger_theme"][1] = "设置消息主题"
1614-
md["set_messenger_theme"][2] = "kenmerk_thema_van_bericht"
1638+
md["set_messenger_theme"][2] = "thema_van_bericht_instellen"
16151639
md["set_messenger_theme"][3] = "définir_thème_du_message"
16161640
md["set_messenger_theme"][4] = "impostare_tema_del_messaggio"
16171641
md["set_messenger_theme"][5] = "メッセージのスタイルを設定する"

0 commit comments

Comments
 (0)