繁体   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