我是 selenium webdriver 的新手,我正在使用 2.31 版本、testng 6.8 和 IE 8 上的防火测试。我正在这个方案中编写我的测试:我有测试类,其中我有带有 testng @Test 注释的方法。它看起来像这样:
@Test(description="click Save Button ", dependsOnMethods = { "edit form" })
public void clickSaveButton(ITestContext context) {
page.clickSaveButton(driver);
}
然后,如您所见,我有一个页面类,我在其中存储元素 id、xpath 等。它像这样:
public void clickSaveButton(WebDriver driver){
Configuration.clickfoundElement(By.id(conf.get("saveButton")), driver);
}
conf 是表示属性文件的对象。最后我有配置类,我会这样想:
public static void clickfoundElement(By by, WebDriver driver){
int attempts = 0;
while(attempts < 10) {
try {
driver.findElement(by).click();
break;
} catch(NoSuchElementException e) {
System.out.println("NoSuchElementException");
Reporter.log("NoSuchElementException<br/>");
if(attempts==9){
throw(e);
}
}
catch(StaleElementReferenceException e) {
System.out.println("StaleElementReferenceException");
Reporter.log("StaleElementReferenceException<br/>");
if(attempts==9){
throw(e);
}
}}
这使我无法拥有 NoSuchElementException 和 StaleElementReferenceException 并且工作得很好。
我的第一个问题是这种方法是否正确?第二个也是最重要的问题是,我有时会遇到以下问题:
Testng 说“clickSaveButton”(在最终报告中)已通过,但实际上 clickSaveButton 操作没有发生(我可以看到它在测试期间看着我的浏览器)。在下一个测试的最后,我有“NoSuchElementException”(特别是当下一个测试不是点击某些东西而只是从 html 组件获取文本时)。当然这个 NoSuchElementException 发生是因为我真的没有要寻找的元素(因为最后一个测试操作没有发生所以我仍然在上一个站点,没有这个元素)你能告诉我为什么会发生这种情况(重要的并不总是但只是有时)以及如何预防?
提前致谢。