我在Selenium IDE中进行了快速测试,并将其导出为Webdriver支持的JUnit测试。如果页面上存在每个元素,它都可以正常工作。我改变了一些定位器,看看如果Selenium找不到它们会发生什么,我发现了一个奇怪的问题:
示例1:
selenium.click("link=Something");
'Something'不存在,所以我的测试会在几秒钟内停止,但有异常: “com.thoughtworks.selenium.SeleniumException:Element link = Something not found”。
示例2:
selenium.click("//div[2]/inprut");
显然,在页面上找不到定位器(因为输入错误),但是测试不会失败,只是简单地停留在这一行。
这可能是一个愚蠢的问题,但有可能使click()函数 - 与XPath定位器一起使用 - 的行为与示例1中的相似吗?我是Selenium的初学者,所以感谢任何帮助。
答案 0 :(得分:0)
在代码中添加一些后备逻辑是一种很好的做法。通常情况下,您可以extend
将您的班级TestScript
改为某类public String getElement(String element) {
try {
if (isElementPresent(element)) return element;
Integer timesIterated = 0;
logInfo("Attempting to find element: [" + element + "]");
for (timesIterated = 0; timesIterated < maxAttempts; timesIterated++) {
if (isElementPresent(element)) {
if (!isVisible(element)) logInfo("WARNING: [" + element + "] is not visible!");
logStatus("Found");
selenium.highlight(element);
break;
} else {
Integer t = timesIterated + 1;
logInfo(t.toString() + "/" + maxAttempts);
if (timesIterated >= maxAttempts) logTestResult("Could not find [" + element + "]", false);
}
sleep(2);
}
} catch (Exception x) {
logError(x.getMessage());
end();
}
return element;
}
类,但更深层次的,您可以实现类似
isElementPresent(String)
请注意,这是非常随意的,我提到的功能将不适合您。你必须自己实现它们。这是我使用的框架中的实际代码片段,用于查找元素。如果没有,它将记录错误,然后使脚本失败。
编辑:这与你的问题有关,因为我的isElementPresent(String)
函数同时适用于xpath,AND css ......所以无论你提供什么样的选择器,它都能正常工作。因此,在{{1}}函数中,实现逻辑以支持两个选择器。