2016-12-28 54 views
0

我使用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?我的应用程序?我的开发环境?

+0

它可能是任何东西,但是当我改变我的测试环境(例如preprod1为preprod2)时遇到这种问题。我建议你在你的基本方法中加入你的等待操作(比如“点击”),这样你的代码就不会充满“wait.until”了。 –

回答

1

你最近切换到使用geckodriver?如果是这样,你可能会看到this issue

如果没有,闪烁的方式会在Web应用程序中发生变化吗?例如他们曾经在页面加载时呈现,现在他们通过javascript异步加载

+0

切换到Selenium 3/geckodriver是个问题。 – gwg

相关问题