我和我的团队最近开始使用Selenium Web Driver和JUnit开发自动化脚本。我正面临着一个问题,我完全没有关于如何进行的想法。任何建议都会有用。
问题在于:我有一个页面,我在表单中上传两个excel,然后按提交按钮确认上传。
上传完成后,它会使用数据填充数据库,下一页确认每个Excel的行数。
我正在尝试获取确认上传的元素,这是一种“标签”类型。
所有这些都可以在我的电脑上成功运行(Windows 7,firefox webdriver)。
上传我的代码时,当jenkins构建/执行它时,我得到一个“找不到元素”并且测试失败。
由于我无法直观访问jenkins运行的内容,因此我使用getPageSource()
替换了元素确认(在jenkins上失败)。
getPageSource()
返回我期望看到的页面,我想要找到的元素(本地和jenkins)。
关于可能发生的事情的任何想法?
备注: 的
有两个10秒的thread.sleep。一个在上传每个Excel时,一个在点击提交后,以确保加载下一页并成功提交excel。
我尝试使用xpath定位元素。事实上,我使用了Firefox中的Firebug和Chrome中的Web开发人员给我的xpath。只是为了确保xpath没有任何问题。两个xpath都在我的本地机器上成功定位元素,但在jenkins上失败。
执行测试(在本地和Jenkins上)我可以看到数据库应该填充它。
请原谅缺乏代码,但我对可以分享的内容有所限制。
答案 0 :(得分:0)
尝试使用fluentwait而不是Thread.sleep()。您的元素可能在10秒内未加载,您可以尝试使用
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
给定here。