3

我已经在 selenium IDE 中进行了一些研究和大量的研究,但我还找不到任何方法来做到这一点。

我要做的基本上是添加额外的支持并更改某些命令的现有实现,即 isTextPresent 和 addSelection。我基本上可以单独保留 WebDriver JUnit 导出器的大部分功能,因为它工作正常,但只想添加一些自定义方法返回。

例如,我想从此更改 isTextPresent() 的导出器:

// Warning: waitForTextPresent may require manual changes
for (int second = 0;; second++) {
    if (second >= 60) fail("timeout");
     try { if (driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*SOME INTERESTING TEXT[\\s\\S]*$")) break; } catch (Exception e) {}
            Thread.sleep(1000);
}

对此:

SeleniumHelperUtil.isTextPresent("SOME INTERESTING TEXT");

这样我就可以使用我希望所有 selenium 测试都使用的自定义 SeleniumHelperUtil java 类。这是一个大型复杂的工作流程项目,因此我们最终将进行数百次测试。我希望我的测试人员构建他们的测试用例,使用 WebDriver 将它们导出到 Java 到 JUnit4 测试中。然后他们可以将它们签入 CVS,我们的自动 Hudson 构建服务器将在每晚运行新测试。我希望在我们的开发人员干预最少的情况下实现这一点(好吧,现在真的只有我一个 ATM,我没有时间,直到他们发明了 30 小时的一天 :))。

我试过的

我尝试通过剪切和粘贴来自 webdriver.js 的所有代码(包括选项)来制作自定义导出器,并且我已将 waitFor 函数修改为如下所示:

function waitFor(expression) {
  return "SeleniumHelperUtil.isTextPresent(" +  expression ")";
}

不幸的是,我得到的只是 WebDriver.js 实现,它是:

// Warning: waitForTextPresent may require manual changes
for (int second = 0;; second++) {
    if (second >= 60) fail("timeout");
     try { if (driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*SOME INTERESTING TEXT[\\s\\S]*$")) break; } catch (Exception e) {}
            Thread.sleep(1000);
}

我正在使用 Selenium 和 Firefox 13 的 1.9.1 版本(由于工作限制,我显然无法安装完整的版本)。

现在我在 xpi 文件中的 WebDriver-Junit4.js 文件中找到了代码的一部分,因此我可以修改它并使用我的自定义代码重建插件,但是像我一样通过 selenium-ide 来完成它会很好我不知道当我在那里时我可能会破坏什么。

4

1 回答 1

0
public boolean isTextPresent(WebDriver driver, String textToCheck)
{
    try
    {
        org.openqa.selenium.By by = By.xpath("//p[contains(.,'"+textToCheck+"')]"));
        driver.findElement(by); 
        return true;
    }
    catch (NoSuchElementException e)
    {
        return false;
    }
}

要检查 Selenium 单元测试的结果:使用 firebug。

于 2012-12-11T13:06:05.730 回答