三つに要約することができ、簡単な方法で、セレンwebdriverをして待っています:
1、インポート時パッケージ、コールtime.sleep()の着信時に、このアプローチはまた、一定のデッドタイムとして、待機させ呼ばれています
2、暗黙の待機、直接呼び出しimplicitly_wait()メソッド、待ち時間に渡し、そのようimplicitly_wait(10)は、それが一番長い待ち時間10秒であること
図3に示すように、明示的な待ち時間、及び導入WebDriverWait expected_conditionsパケットによってコール()までuntil_not()メソッド
以下の二つの方法に焦点を当てた後、
まず、暗黙の待ち時間:
それは、そうでない場合は、次のステップ、実行または完了されたページ要素を探し、または全くの要素が指定された時間コマンド内で見つからない場合、最大待機時間を設定するには、コマンドを実行するために、自動化実装プロセスの中で述べて最長セットされるまで待ちます期限を待ちます
コードセグメントで見てみましょう:
セレンインポートwebdriverをから
unittestを、時間をインポート
selenium.common.exceptionsからはNoSuchElementException、TimeoutExceptionをインポート
輸入トレースバック
クラスVisitSogouByChrome(たunittest.TestCase):
デフセットアップ(自己):
#起動クローム
self.driver = webdriver.Chrome(executable_path = "D:\\ chromedriver")
デフtest_implictWait(自己):
URL = 'https://www.baidu.com/'
self.driver.get(URL)
セット#暗黙的に待機時間は10秒です
self.driver.implicitly_wait(10)
試してみてください。
検索= self.driver.find_element_by_id( "KW")
search.send_keys( "毒")
クリック= self.driver.find_element_by_id( "SU")
click.click()
(はNoSuchElementException、TimeoutException)を除きます:
traceback.print_exc()
デフティアダウン(自己):
#出口Google Chromeの
self.driver.quit()
このコードは、基本的に完成し、オープンBaiduはページ、検索薬物運転を検索します。我々はそれに対して暗黙的なコールウェイティングがimplicitly_waitある()メソッドを参照してくださいすることができます。
待機のような暗黙的な利益をある程度テストケースの効率を向上させることができ、他の固定デッドタイムn秒と同じように(time.sleep(n)を)待つことを余儀なくされていません。しかし、この方法はまた、いくつかの欠点を持っているページ全体がロードされるまで、プログラムが待機する、小さな円はもはや表示され、ブラウザウィンドウのタブバーには、そのようなページ要素として、次のステップに進みますされた時間の一部に追加されましたどのように良いが、遅いのjsファイルリソースを待っ関係なく、この時間は、プログラムはまだテストケースの実行時間を長くし、次のステップ、前にすべて完了をロードするためのページを待っていることでしょう。
注:暗黙の待ち時間は一度だけ設定する必要があり、その後、彼は、ライフサイクル全体のドライバで役割を持っています
第二に、明示的な待ち時間:
WebDriverWait selenium.webdriver.suppert.uiクラスクラスまで合成モジュール、()及びuntil_not()メソッド、および待ち時間をカスタマイズし、柔軟決意条件に従って待つことによって。暗黙の実行待ちよりも経済的、明示的な待機時間は、これより明示的に推奨待っモード裁判官は、ページ要素があるかどうか
WebDriverWait分析カテゴリ:WebDriverWaitクラスのコンストラクタ:
INIT(自己、ドライバ、タイムアウト、poll_frequency = 0.5、ignored_exceptions =なし)
パラメータの説明:
ドライバ:webdriverをインスタンスオブジェクト(IE、Firefoxの、クロム、等)
タイムアウト:微妙での最大待機時間
poll_frequency:すべての判定poll_frequency時間の条件を実行し、タイムアウト時間で査定率を、呼び出して、デフォルトの0.5秒
ignored_exceptions:無視実行中に例外オブジェクト、デフォルトの唯一の例外クラスTimeoutExceptionによって無視
WebDriverWaitクラスはメソッドを提供します。
(1)(メソッド、メッセージ= '')まで
タイムアウトTimeoutExceptionは、情報のメッセージでスローされた場合に指定された時間内に、時間の戻り値によるメソッド呼び出し方法、約時に、Falseで
(1)until_not(メソッド、メッセージ= '')
タイムアウトTimeoutExceptionは、情報のメッセージでスローされた場合、戻り値によるメソッド呼び出し方法、約時刻からの時間に、指定された時間内に発現した()メソッドは逆に、まで、Falseで
次のコードは、明示的な決意要素が存在するのを待つことです
セレンインポートwebdriverをから
ECとしてselenium.webdriver.support輸入expected_conditionsから
selenium.webdriver.support.ui輸入WebDriverWaitから
デフis_element_exsist2(ドライバ、ロケータ):
「」」
Expected_conditionsは、WebDriverWait結合要素があるか否かを判定する
時間1秒の間隔で、30代のタイムアウト、リターン真の存在、および偽の分析は存在しません。
:Paramのロケータ:ロケータタプル型、例えば( "ID"、 "KW")として
:リターン:BOOL值、TrueまたはFalse
「」」
試してみてください。
WebDriverWait(ドライバ、30、1)(EC.presence_of_element_located(ロケータ)).until
trueを返します
除きます:
リターン偽
__name__ == '__main__' の場合:
LOC1 =( "ID"、 "KW")#元素1
プリント(is_element_exsist2(ドライバ、LOC1))
明示的な目的のシーンを待っています
-
長いページ要素法を用いた物体のリターンがあるほど、可視必ずしも、DOMの要素があるかどうかを決定するpresence_of_element_located(ロケータ):wait.until(EC.presence_of_element_located((By.ID、「KW」)))
-
alert_is_presentは()の使用に待機して表示されるページの警告ボックスがあるかどうかを決定します。
待つ= WebDriverWait(ドライバ、10)
爆弾ボックスに関する情報を印刷
wait.until(EC.alert_is_present())。テキスト
-
element_to_be_clickable(ロケータ):要素が表示され、使用にクリックすることができるかどうかを判断する。wait.until(EC.element_to_be_clickable((By.ID、 "KW")))
-
element_to_be_selected(ロケータ):())EC.element_to_be_selected((By.ID、 "KW")wait.until:所望の要素は、パラメータWebDroverインスタンスオブジェクト、使用するように、選択され
-
title_is(title_text):wait.until(EC.title_is(U「百度」)):ページタイトルの内容が正確に入ってくるtitle_textの内容と一致するかどうかを判断するためには、トゥーレ、ノーリターンFalseを、使用を返します