Сообщение об исключении не выводится при использовании WebDriverWait из Selenium через Python - PullRequest
0 голосов
/ 25 июня 2019

Я могу видеть сообщение об исключении, если xpath находится в блоке try-except() как self.driver.find_element_by_xpath(). Но когда я добавляю явное ожидание для элемента, сообщение об ошибке будет пустым, если xpath отсутствует или неправильный.

Как напечатать сообщение об ошибке в блоке кроме? Если я запускаю это, для 1-го, способного выдать e, следующий будет пустым

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.Chrome()
driver.get("https://www.google.com/")
driver.implicitly_wait(10)

try:
    input_element=driver.find_element_by_xpath("//input[@name='q123']")
    input_element.send_keys('Name')
except Exception as e:
    print(e)

try:
    ip_ele=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//input[@name='q123']")))
    ip_ele.send_keys('Name')
except Exception as e:
    print(e)

1 Ответ

0 голосов
/ 26 июня 2019

Когда вы используете find_element_by_* и incase не найден, элемент Исключение NoSuchElementException .

Но если вы вызовете WebDriverWait в сочетании с Ожидаемые_условия при ошибке Выдается исключение TimeoutException .

На этом этапе стоит упомянуть, что вы всегда должны ловить желаемое исключение, т.е. либо NoSuchElementException, либо TimeoutException, но , а не базовое исключение, т.е. Exception, чтобы поддерживать чистоту ваших тестов.

Простой тест для наблюдения NoSuchElementException и TimeoutException в деталях:

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    
    chrome_options = webdriver.ChromeOptions() 
    chrome_options.add_argument("start-maximized")
    chrome_options.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    try:
        driver.find_element_by_xpath("//input[@name='q123']").send_keys("user10391084")
    except NoSuchElementException as nse:
        print(nse)
        print("-----")
        print(str(nse))
        print("-----")
        print(nse.args)
        print("=====")
    
    try:
        WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//input[@name='q123']"))).send_keys("user10391084")
    except TimeoutException as toe:
        print(toe)
        print("-----")
        print(str(toe))
        print("-----")
        print(toe.args)
    driver.quit()
    
  • Консольный вывод:

    Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name='q123']"}
      (Session info: chrome=75.0.3770.100)
    
    -----
    Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name='q123']"}
      (Session info: chrome=75.0.3770.100)
    
    -----
    ('no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name=\'q123\']"}\n  (Session info: chrome=75.0.3770.100)', None, None)
    =====
    Message: 
    
    -----
    Message: 
    
    -----
    ('', None, None)
    

Заключение

Вы можете видеть из Консольного вывода через сообщение Часть исключения правильно определена для NoSuchElementException, но сообщение деталь не определена для TimeoutException. Следовательно, он становится пустым.

...