>我有一个Selenium 2测试,它使用登录表单,然后通过验证页面标题是否已更改来断言登录已成功。
该测试是用Java/JUnit,WebDriver和Fluent Selenium编写的
fwd.title().within(secs(5)).shouldContain(partialTitle);
这些测试适用于Firefox和Chrome。在 Safari 上,页面标题仍然是旧的登录页面标题。
我们生成的截屏视频显示成功登录后的 URL 已更改,但标题未更改。
我认为SafariDriver
在断言之前没有等待页面加载事件完成。
我有同样的问题!!我的测试失败,因为标题用于检查测试"步骤"。
使用Firefox和Chrome没有问题;使用Safari则有问题!!
我发现这个"黑客"有效,但有必要在每次"点击"后手动检查标题:
def static void waitForPage(driver, String title) {
//Hack to make login working on Safari&IE
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().startsWith(title);
}
});
}
GEB + SPOCK,并且使用野生动物园驱动程序存在关于隐式/显式等待的"已知问题"(参考 https://code.google.com/p/selenium/issues/detail?id=5860)。
因此,在 Safari 浏览器上使测试可运行的一个很好的解决方法是等待页面标题:
static at = {
waitFor { title == "Homepage" }
}
这将强制驱动程序等到标题更改 (超时是可配置的) 。