Как установить условие ожидания в тесте на селен Python - PullRequest
0 голосов
/ 21 июня 2019

Я хотел бы спросить, как решить задержки в тестировании. Теперь у меня есть такой скрипт:

WebDriverWait (self.browser, 20) .until (EC.element_to_be_clickable ((By.ID, "Login1_LoginButton"))).
sleep (5) \ t
self.assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")

Это вход в приложение, когда после входа проверяется имя страницы. Из-за скорости интернета она не всегда оптимальна, а иногда тест не проходит. Было бы лучше поместить туда условие, которое будет ожидать входа приложения в систему, а затем проверять. Также давая там просто спать (5) я нахожу неправильное решение. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 июня 2019

Tomasito,

Вы должны выяснить, какой элемент появляется последним после успешного входа в систему, затем написать локатор этого элемента и передать команду веб-драйвера. WebDriverwait является оптимальным решением для этого:

после нажатия на кнопку входа в систему, вы можете утверждать имя страницы следующим образом:

wait = WebDriverWait(self.browser, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web page heading or any element that loads after')))  

self.assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")

Обратите внимание, что крайний случай этогоtime.sleep(), который устанавливает условие для точного периода времени ожидания.

Вы можете ссылаться на официальную ссылку

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

Еще немного информации о сценарии использования помогло бы нам составить более канонический ответ. Однако вы можете рассмотреть следующие подходы:

  • Если ваш вариант использования должен утверждать Заголовок страницы , вы можете вызвать WebDriverWait для любого элемента в теге <body>, например Заголовок страницы , к этому среднему времени Page Title , т. е. тег <title>, который всегда является частью тега <head>, должен отображаться задолго до элементов внутри тега <body>, и вы можете использовать следующее решение:

    WebDriverWait (self.browser, 20) .until (EC.visibility_of_element_located ((By.CSS_SELECTOR, "css_page_header")))
    self.assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")
    
  • Вы также можете заставить WebDriverWait , чтобы Заголовок страницы содержал определенный текст, например. Горячая линия , а затем подтвердить Заголовок страницы следующим образом:

    WebDriverWait (self.browser, 20) .until (title_contains("Hotline"))
    self.assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")
    
0 голосов
/ 21 июня 2019

Установите ваше условие ожидания, как показано ниже, оно работало для меня. если не работает, дайте мне знать. И также не путайте с self.browser & self.assertEqual, я не использовал self, потому что это работает для меня без создания класса. если вы создаете класс и методы, вы должны объявить переменную self. Для моей программы я только что создал метод, запустил его и объявил как глобальную переменную. Как показано ниже,

def setup():
     global driver
     driver = webdriver.Chrome(executable_path="")
     driver.maximize_window()

def execute():

    wait = WebDriverWait(browser, 10)
    element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web 
    page heading or any element that loads after')))  

    assertEqual ("Page 1 | Hotline", self.browser.title)
    print ("Login OK")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...