簡體   English   中英

Selenium-Python-如何減少NoSuchElementException的時間

[英]Selenium-Python - How to reduce time for NoSuchElementException

我有一個測試用例,需要檢查單擊某個元素時是否不顯示彈出窗口。 該代碼可以正常工作,但是NoSuchElementException花費的時間太長,需要60秒,打印PASS條件並移至下一個測試用例。 在這種情況下如何減少等待時間?

driver.find_element_by_xpath(
".//*[@id='assetIdDIV']/div/myaots-input/div/div/div[1]/span/i[2]"
).click()

try:
    DUP_popup = driver.find_element_by_xpath(
    ".//*[@id='DuplicateTicketsPopup']/div/div/div/div[1]/span[2]/img"
    )

    if (DUP_popup):
        print ("Duplicate tkts popup is displayed - Fail")

except NoSuchElementException:
        print ("Duplicate popup not displayed - PASS")

您可以使用顯式等待。

WebDriverWait默認情況下每500毫秒調用一次ExpectedCondition,直到它在超時內成功返回為止,否則拋出TimeoutException

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

try:
  DUP_popup = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPath, 
      "//*[@id='DuplicateTicketsPopup']/div/div/div/div[1]/span[2]/img"))
  )

  # This waits up to 10 seconds before throwing a TimeoutException 
  # unless it finds the element to return within 10 seconds.

  if (DUP_popup):
    print ("Duplicate tkts popup is displayed - Fail")

except TimeoutException:
  print ("Duplicate popup not displayed - PASS")

可以在此處找到有關顯式等待和隱式等待的更多詳細信息

目前尚不清楚為什么引發NoSuchElementException並打印通過條件會花費長達60秒的時間,但是您可以通過以下方法來配置等待時間,該等待時間由等待者來引發WebDriverWait ,如下所示:

driver.find_element_by_xpath(".//*[@id='assetIdDIV']/div/myaots-input/div/div/div[1]/span/i[2]").click()
if(len(WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, ".//*[@id='DuplicateTicketsPopup']/div/div/div/div[1]/span[2]/img"))))!= 0):
    print ("Duplicate tkts popup is displayed - Fail")
else:
    print ("Duplicate popup not displayed - PASS")

注意 :如果您的程序包含_implicitly_wait()_,則需要刪除_implicitly_wait()_的實例,因為文檔中明確提到Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times.

檢查驅動程序實例的隱式等待值。 如果隱式值設置為60secs,則它將等待60secs引發任何與硒相關的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM