【问题标题】:WebDriver : Automated Code Generation without using Selenium IDEWebDriver:不使用 Selenium IDE 的自动代码生成
【发布时间】:2013-08-07 13:14:42
【问题描述】:

My Companys 网站仅与 IE 兼容。所以我不能使用 IDE 来记录 webdriver 脚本。 有些 HTML 页面有大约 100 或 200 个(不精确计数)的文本框和下拉菜单。

编写 java 代码来自动完成这项工作非常乏味。

有人可以为我提供工具或实用程序来读取 HTML 文件本身并生成相应的代码吗? 或者指导我如何开发一个实用程序来满足我的需要?

例如:

考虑一个像这样的 html 文件

<html>
<body>
<input name = "employee_name" />
<select id = "designation">
<option value = "MD">MD</option>
<option value = "programmer"> Programmer </option>
<option value = "CEO"> CEO </option>
</option>

<body>
</html>

如果我将此文件作为实用程序的输入,它将为我生成一个这样的 java 文件

WebDriver driver = new InternetExplorerDriver();

WebElement employee_name = driver.findElement(By.name("employee_name"));
employee_name.sendKeys("...");

Select designation = new Select(driver.findElement(By.id("designation")));
designation.selectByVisibleText("...");

提前致谢!

【问题讨论】:

  • 我也一直在寻找这样的实现。我遇到了这个:Self-Generating Test Artifacts for Selenium/WebDriver 真的不明白他们是怎么做到的。
  • 该演示文稿使用的代码是:github.com/mmerrell/tastymonster
  • 试试this 会有一些帮助。
  • 我想补充一点,如果你能找到一个可靠的工具,我无论如何都不会使用它——记录和播放的概念非常糟糕。是的,自动化这一切是乏味的,但它会得到回报....也许没有 IE 插件这样做的原因是 IE 的插件架构是垃圾或缺乏文档。
  • 人类世界还没有一个工具可以像高级开发人员一样自动生成可维护和优雅的UI测试代码。您可能会发现记录测试更容易,但是当您开始维护它们时,您会意识到它会变得多么糟糕。

标签: java dom webdriver html-parsing selenium-webdriver


【解决方案1】:

您应该使用“Selenium Builder”而不是“Selenium IDE”,但是理论上,您可以从一个组中的页面中获取所有相似的元素,如下所示:

List<WebElement> bodyinputs = driver
       .findElements( By.xpath("//div[@class='body']/input") );
List<WebElement> footeranchors = driver
       .findElements( By.xpath("//div[@class='footer']/a") );

然后,对于这些组中的每一个,您可以遍历列表并使用 JavaScriptExecutor 来评估和计算每个元素的 XPath,并将 XPath 与每个元素一起存储在哈希表中:

protected String getXPath() { 
        String jscript = "function getPathTo(node) {" + 
            "  var stack = [];" + 
            "  while(node.parentNode !== null) {" + 
            "    stack.unshift(node.tagName);" + 
            "    node = node.parentNode;" + 
            "  }" + 
            "  return stack.join('/');" + 
            "}" + 
            "return getPathTo(arguments[0]);"; 
        return (String) driver.executeScript(jscript, webElement); 
    } 

然后,最后一步,您可以使用 HashTable 作为输入自动生成“按定位器”。

但即使你这样做了,你仍然需要编写代码来智能地确定哪些 By 定位器获取哪些输入,哪些不获取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2010-10-04
    相关资源
    最近更新 更多