每当发生JavaScript错误时,我的应用都会显示错误对话框。这总是一个不好的标志,所以我想设置我的测试,这样,如果出现错误对话框,它会导致测试在那里失败。
所以我想做类似的事情(非常伪代码!);
// start a new 'guard' thread;
start {
found = this.driver.wait(untilVisible(By.css('.myErrorDialog')), VERY_LONG_TIMEOUT);
if (found) {
// the error dialog appeared! That's bad!
throw();
}
}
// now run the test
login();
clickButton();
testBannerContains();
但我遇到了麻烦,我认为这与Selenium安排行动的方式有关。
我发现,对于一个单独的驱动程序,我一次只能安排一件事,所以我在测试早期设置的警卫会阻止测试的主体开始。
有没有更好的方法来处理像这样的条件,这应该永远不会发生,或者是在同一个测试中创建两个独立线程的方法?
答案 0 :(得分:0)
因此,您所拥有的代码存在的问题是它会立即运行它并等待VERY_LONG_TIMEOUT
时间显示该错误对话框。由于它永远不会,它继续等待。你已经发现那不是你想要的......;)
我没有做过这样的事情,但我认为你想要一个JS事件处理程序来监视错误对话框出现时触发的事件。请参阅以下链接以获取一些指导。
Can my WebDriver script catch a event from the webpage?
一种选择是监视该事件,然后在某些JS变量中存储true
(或其他)。在离开页面之前,检查变量是否设置为true
,如果是,则测试失败。您可以使用JavascriptExecutor
设置和获取JS变量。一些谷歌搜索应该可以为您提供使用它所需的一切。