Selenium JUnit测试卡在点击()

时间:2013-01-04 11:54:18

标签: java testing selenium junit webdriver

我在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的初学者,所以感谢任何帮助。

1 个答案:

答案 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}}函数中,实现逻辑以支持两个选择器。