Python用のセレン。 第5章期待

PythonのSelenium非公式ドキュメントの翻訳の継続。

オリジナルはこちらにあります



内容:



1. インストール

2. 最初のステップ

3. ナビゲーション

4. アイテムを検索する

5.期待

6.ページオブジェクト

7. WebDriver API

8.付録:よくある質問



5.期待



最近では、ほとんどのWebアプリケーションはAJAXテクノロジーを使用しています 。 ページがブラウザに読み込まれると、このページの要素はさまざまな時間間隔で読み込まれます。 これにより、要素を見つけるのが難しくなります;要素がDOMに存在しない場合、ElementNotVisibleExceptionがスローされます。 期待を使用して、この問題を解決できます。 待機により、実行されるアクション(要素の検索または要素を使用したその他の操作)の間に一定の時間間隔が与えられます。



Selenium WebDriverは、暗黙的と明示的の2つのタイプの期待を提供します。 明示的な待機により、WebDriverはアクションが実行される前に特定の条件が発生するまで待機します。 暗黙の待機により、WebDriverは要素を見つけようとするときに、一定時間DOMをポーリングします。



5.1明示的な期待



明示的な待機とは、さらにコードを実行するために必要な条件を決定するコードです。 このようなコードの最悪の例は、正確なタイムアウトを設定するtime.sleep()コマンドの使用です。 必要なだけ正確に期待するコードを書くのを助けるより便利な方法があります。 WebDriverWaitとExpectedConditionの組み合わせは、そのような方法の1つです。



from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()
      
      





このコードは10秒間待機してからTimeoutExceptionをスローするか、10秒間に要素が見つかった場合にそれを返します。 WebDriverWaitは、デフォルトで、正常に返されるまで500ミリ秒ごとにExpectedConditionを呼び出します。 ExpectedConditionの正常な戻り値はブール型であり、trueを返すか、他のすべてのExpectedCondition型に対してnull以外を返します。



期待される条件

ウェブサイトを自動化するときによく見られる特定の条件があります。 以下はそれぞれの実装です。 Selenium Pythonのバインディングはいくつかの便利なメソッドを提供するため、expected_conditionクラスを自分で記述したり、独自のユーティリティパッケージを作成したりする必要はありません。





 from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))
      
      





expected_conditionsモジュールには、WebDriverWaitを操作するための一連の定義済み条件が既に含まれています。



5.2暗黙の期待



暗黙的な待機は、WebDriverに、その時点では利用できない要素を見つけようとするときに、DOMを一定時間ポーリングするように指示します。 デフォルト値は0です。インストール後、オブジェクトのWebDriverインスタンスが存続する間、暗黙的な待機が設定されます。



 from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) # seconds driver.get("http://somedomain/url_that_delays_loading") myDynamicElement = driver.find_element_by_id("myDynamicElement")
      
      





次の章に移動:ページオブジェクト



PS:なんらかの理由で、ユーザーpenguinoはドキュメントのさらなる翻訳の作成を停止したので、次の章を翻訳する自由をとることにしました。



All Articles