我使用Selenium来测试Web应用程序的用户界面。这些测试在过去的一年中一直持续运行。现在,他们都失败了。当我慢慢修复它们时,我一直不得不使用WebDriverWait
来等待加载URL。例如,本次测试使用的经过:为什么我现在需要在我所有的Selenium测试中使用WebDriverWait?
def test_alphanumeric_username(self):
# This function creates a new user by navigating to a new page.
# On completion, a message should flash on the user's screen.
register_user(self.browser, username='@@@')
message = get_flashed_message(self.browser)
self.assertEqual(message, 'Username must be alphanumeric.')
def get_flashed_message(browser):
message = browser.find_element_by_xpath('//div[@class="flashes"]//p')
return message.text
但每次测试依赖于get_flashed_message
失败,直到我做了这个修改:
def get_flashed_message(browser):
message = wait_until(browser, '//div[@class="flashes"]//p')
return message.text
def wait_until(browser, xpath_selector, timeout=20):
wait = WebDriverWait(browser, timeout)
return wait.until(lambda b: b.find_element_by_xpath(xpath_selector))
这个问题与我所有的测试发生了,现在我的代码充斥着等待或睡眠的呼叫。什么可以改变? Selenium的API?我的应用程序?我的开发环境?
它可能是任何东西,但是当我改变我的测试环境(例如preprod1为preprod2)时遇到这种问题。我建议你在你的基本方法中加入你的等待操作(比如“点击”),这样你的代码就不会充满“wait.until”了。 –