Selenium の 3 つの主要な待機プロセス

使用シナリオ: ページ要素を操作するときに、プロセスが成功するまで待つ必要がある場合があります。

UI 自動化を実行するときは、安定性を考慮してください。同じスクリプトを複数回実行すると、確実に成功する可能性があります。

1.強制待機:スリープ(秒) 

たとえば、sleep(10) では、次のステップを実行する前に 10 秒待機する必要があります。
シンプルで粗雑ですが、コードのスリープ時間が長くなり、冗長性が高まります。

 2. インテリジェントな待機: 明示的な待機

特定の要素に対して特別に設定された待ち時間。指定された時間内に要素が見つかる。見つかった場合は次のステップが実行される。見つからない場合は例外 ( 
TimeoutException) がスローされる。高効率かつカスタマイズ可能な条件。
selenium.webdriver.support.wait から WebDriverWait をインポート
WebDriverWait(セッション オブジェクト、タイムアウト長 (秒)、条件チェックのデフォルト期間は 0.5).until(条件) 
WebDriverWait(セッション オブジェクト、タイムアウト長 (秒)、条件チェックのデフォルト期間は 0.5).until_not(条件)
Selenium3 では、各条件はクラスの形式で実装されます。各クラスには__init__、__call__があり、
selenium4では各条件を関数の形で実装しています。すべての関数には _predicate 内部関数があります。閉鎖
明示的待機を使用する場合は、まず条件を判断します。次に、明示的な待機を使用します。
グローバルに使用できる暗黙的な待機とは異なり、待機効果は 1 回だけ使用できます。
より一般的な使用法: 明示的な待機 + 短いスリープ
一般的に使用される条件: 
Visibility_of_element_located(locator) --- locator に対応する要素が表示されている
element_to_be_clickable(mark) --- mark に対応する要素がクリック可能である
3. インテリジェントな待機: 目に見えない待機
find_element/find_elements メソッドを呼び出すとき、要素が見つからない場合でも、エラーはすぐには報告されません。
暗黙的な待機が積極的に使用されます。最大待機時間に達すると、例外がスローされます。
セッション (ブラウザを開いてから閉じるまでのプロセス) では、一度呼び出すだけで済み、グローバルに使用できます。
要素を正確に配置する方法はなく、実際の作業効率に影響を及ぼします。
3 つのメソッドを一緒に使用するコードは次のとおりです。
1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 6 driver = webdriver.Chrome()
 7 driver.get("https://www.baidu.com")
 8 #隐形等待
 9 driver.implicitly_wait(10)
10 driver.maximize_window()
11 # 显性等待
12 #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 el.click()
15 # 强制等待
16 time.sleep(3)
17 driver.quit()
期待される条件と組み合わせて待機を表示するコードは次のとおりです。
 1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.wait import WebDriverWait
 4 from selenium.webdriver.support import expected_conditions as EC
 5 
 6 # driver = webdriver.Chrome()
 7 # driver.get("https://www.baidu.com")
 8 # #隐形等待
 9 # driver.implicitly_wait(10)
10 # driver.maximize_window()
11 # # 显性等待
12 # #每0.5秒扫描一次浏览器,总共扫描5秒,直到找到指定的元素为止,如果找到就返回这个元素,没有找到就抛出异常,并且提示没找到元素
13 # el = WebDriverWait(driver,5,0.5).until(lambda el:driver.find_element('xpath','//a[text()="hao123"]'),message="没找到元素")
14 # el.click()
15 # # 强制等待
16 # time.sleep(3)
17 # driver.quit()
18 #
19 driver = webdriver.Chrome()
20 driver.maximize_window()
21 driver.get("https://www.baidu.com")
22 
23 locator = ('xpath','//a[text()="新闻"]')
24 # WebDriverWait()一般与 until()或 until_not()方法配合使用
25 # until(),直到返回值为 True。
26 # until_not(),直到返回值为 Flase。
27 # 判断元素是否可见
28 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可见,如果超过设置时间仍检测不到,则抛出异常。
29 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(locator),message="元素可见")
30 # 判断元素是否可以点击
31 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否可点击,如果超过设置时间仍检测不到,则抛出异常。
32 WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable(locator))
33 # 判断元素是否存在
34 # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。
35 WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(locator))
36 driver.find_element(*locator).click()
37 # 判断标题是否不存在
38 # 在设置时间内,默认每隔一段时间检测一次标题是否不存在,如果超过设置时间仍检测不到,则抛出异常。
39 WebDriverWait(driver,5,0.5).until_not(EC.title_is("123123"),message="标题不是这个")
40 time.sleep(3)
41 driver.quit()

私の記事をよく読んでくださった皆様、ありがとうございます。礼儀には常に礼儀があります。あまり価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。

これらの資料は、[ソフトウェア テスト] の友人にとって、最も包括的で完全な準備倉庫である必要があります。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、お役に立てれば幸いです! 必要な方は、パートナーをクリックしてください。下の小さなカードを受け取ってください  

 

おすすめ

転載: blog.csdn.net/kk_lzvvkpj/article/details/133277300