-1

我在 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 的初学者,因此不胜感激。

4

1 回答 1

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)函数适用于 xpath 和 css ......所以无论您提供什么选择器,它都会起作用。因此,在您的isElementPresent(String)函数中,实现支持这两个选择器的逻辑。

于 2013-01-04T13:10:05.210 回答