エッセイ導入セレン前に知識を待つが、残念ながらその時に限られている、唯一の睡眠とimplicitly_waitの使用を記載しています。今日や知識を追加し、それをWebDriverWait。
、webdrivewaitサンプルコード
-
セレンから輸入webdriverを
-
selenium.webdriver.support.waitから 輸入WebDriverWait
-
selenium.webdriver.supportから輸入expected_conditions ECなど
-
selenium.webdriver.common.byのからのインポートで
-
インポート時
-
ドライバ= webdriver.Chrome()
-
driver.get( "http://www.baidu.com/")
-
ロケータ=(By.ID、 "KW")
-
試してみてください。
-
ELE = WebDriverWait(ドライバ、 10).until(EC.presence_of_element_located(ロケータ))
-
driver.find_element_by_id( "KW")。send_keys('ABC')
-
time.sleep( 1)の効果を確認するために#
-
除きます:
-
印刷( 「ELEは見つけることができません」)
-
最後に:
-
driver.quit()
この文のその後少し分析
WebDriverWait(driver,10).until(EC.presence_of_element_located(locator))
(1)WebDriverWait方法
-
ドライバ:受信webdriverをインスタンス、ドライバーの私たちの例
-
タイムアウト:タイムアウト時間、待つ最大時間(口座に隠された待機時間を割い)
-
poll_frequency:呼び出す メソッドuntil_notデフォルトになるまでの間隔を0.5秒
-
ignored_exceptions:コールがあれば、例外を無視 異常このタプルにuntil_notまで投げやプロセスされ、
-
コードを中断し、例外がこのタプルから放り出され、割り込みコード、例外がスローされた場合、待ち続けません。デフォルトだけはNoSuchElementExceptionことで。
(2)リアメソッドをWebDriverWait待つには二つの方法があります
まで
-
方法:待機中は、(poll_frequencyは中__init__)随時着信コールこのメソッドはfalseを戻り値がでなくなるまで
-
メッセージ:タイムアウトの場合は、TimeoutExceptionを投げて、メッセージが異常渡さ
until_not
-
まで逆に、それまでの要素として、または条件が満たされているように見えるものを継続することで、
-
until_not要素消えたり何条件が満たされていないとき進み、パラメータが同じで、それらを繰り返しません。
上記の内容は、基本的には非常に明確で読み、次のように呼び出します。
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
次のように多くの人々のuntil_notは、WebElement対象に導入されるまで、それは特に、実行可能な方法またはメソッドパラメータことに留意すべきです。
WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # 错误
これは、オブジェクトが持っている必要があることを呼び出すことができる場合には、ここで特定のパラメータの間違った使い方である __call__()
方法を、それ以外の場合は、例外がスローされます:
TypeError: 'xxx' object is not callable
ここでは、セレンを使用することができます提供し expected_conditions
、様々な条件モジュールのWebElementも使用することができ is_displayed()
、is_enabled()
、is_selected()
方法、または包装の独自のメソッドを使用し、その後、次の我々は、セレンを提供条件を見ることができます。
expected_conditions
expected_conditionsセレンを決意するための一連の条件が含まれているモジュールです。
selenium.webdriver.support.expected_conditions(模块)
次の2つの条件は、クラスタイトル、タイトルを確認している受信パラメータを検証するために等しい又はdriver.titleに含ま
title_is
title_contains
要素は、次の2つの条件は、(By.ID、「KW」)のような、パラメータが渡されるロケータタプル型、発生したか否かを確認するために
名前が示唆するように、適格な限り負荷要素が出て通過すると、他のすべて遵守しなければなりません要素条件は、ジョブの外にロードされ
presence_of_element_located
presence_of_all_elements_located
以下三个条件验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement
第一个和第三个其实质是一样的
visibility_of_element_located
invisibility_of_element_located
visibility_of
以下两个条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
text_to_be_present_in_element
text_to_be_present_in_element_value
以下条件判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
以下条件判断是否有alert出现
alert_is_present
以下条件判断元素是否可点击,传入locator
element_to_be_clickable
以下四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组
第三个传入WebElement对象以及状态,相等返回True,否则返回False
第四个传入locator以及状态,相等返回True,否则返回False
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
staleness_of
上面是所有17个condition,与until、until_not组合能够实现很多判断,如果能自己灵活封装,将会大大提高脚本的稳定性