4

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("...");

提前致谢 !

4

1 回答 1

2

您应该使用“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 定位器获得哪些输入,哪些没有。

于 2013-11-24T00:43:21.377 回答