4

我和我的团队最近开始使用 Selenium Web Driver 和 JUnit 开发自动化脚本。我正面临一个问题,我真的不知道如何进行。任何建议都会很有用。

这里是问题:我有一个页面,我在一个表单中上传了两个excel,然后按提交按钮确认上传。

上传完成后,它会用数据填充数据库,下一页会确认每个 Excel 的行数。

我正在尝试获取确认上传的元素,它是“标签”类型。

所有这些都在我的电脑(windows 7,firefox webdriver)上在本地成功运行。

上传我的代码时,当 jenkins 构建/执行它时,我得到一个“找不到元素”并且测试失败。

由于我无法直观地访问 jenkins 运行的内容,因此我将元素确认(在 jenkins 上失败)替换为getPageSource().

getPageSource()返回我希望看到的页面以及我试图找到的元素(本地和詹金斯)。

关于可能发生的事情有什么想法吗?

笔记:

有两个 10sec thread.sleep。每次上传excel时一个,点击提交后一个,确保加载下一页,保证excel提交成功。

我尝试使用 xpath 定位元素。事实上,我在 Firefox 中使用了 Firebug 给我的 xpath,在 Chrome 中使用了 Web 开发人员。只是为了确保xpath没有任何问题。两个 xpath 在我的本地机器上都成功地找到了元素,但在 jenkins 上失败了。

执行测试(在本地和在 Jenkins 上)我可以看到数据库按应有的方式填充。

请原谅缺少代码,但我可以分享的内容受到限制。

4

1 回答 1

0

Try using fluentwait instead of Thread.sleep(). Your element might not have been loaded in 10 seconds you may try this

// 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"));
 }
}); 

as given here.

于 2012-10-24T11:17:40.503 回答