Selenium-Python - Как сократить время для NoSuchElementException - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть тестовый пример, в котором мне нужно проверить, что при нажатии на элемент всплывающее окно НЕ отображается. Этот код работает нормально, но он занимает слишком много времени, 60 секунд для NoSuchElementException, печатает условие 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")

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Непонятно, почему для повышения NoSuchElementException и вывода условия pass потребуется до 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.

0 голосов
/ 30 апреля 2018

Проверьте неявное значение ожидания вашего экземпляра драйвера. Если неявное значение установлено равным 60 сек, то оно будет ждать до 60 сек, чтобы сгенерировать любые исключения, связанные с селеном.

0 голосов
/ 28 апреля 2018

Вы можете использовать явное ожидание.

WebDriverWait по умолчанию вызывает ExpectedCondition каждые 500 миллисекунды, пока он не вернется успешно в течение тайм-аута, в противном случае выведите 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")

Более подробную информацию о явном ожидании и неявном ожидании можно найти здесь

...