【问题标题】:Customising the Selenium Java Junit4 Webdriver exporter自定义 Selenium Java Junit4 Webdriver 导出器
【发布时间】:2012-11-19 04:30:03
【问题描述】:

我已经在 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,因为我不确定当我在那里时我可能会破坏什么。

【问题讨论】:

  • 现在我已经快速修改了 Webdriver-Junit4.js 代码,直到找到更好的方法来处理这个问题。麻烦的是,如果我离开这里,我将锁定一个不受欢迎的版本。如果我设法使更改自主,我将在此处添加它们。

标签: java selenium webdriver junit4 exporter


【解决方案1】:
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。

【讨论】:

  • 非常感谢。我最终修改了 Junit4 Selenium 插件以推出 SeleniumHelperUtil.isTextPresent(driver, text);方法签名,然后我几乎做了上面的帮助类。它对某些方法效果很好,但我不得不放弃它并转向其他更紧迫的优先事项。我认为我仍然可以编写和修改 2 或 3 种方法,但我可以将其传递给其他人。
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 2019-02-09
  • 2018-04-26
  • 2013-07-25
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多