Java WebDriver:不使用Selenium IDE自动生成代码

Java WebDriver:不使用Selenium IDE自动生成代码,java,dom,webdriver,html-parsing,selenium-webdriver,Java,Dom,Webdriver,Html Parsing,Selenium Webdriver,我公司的网站只与IE兼容,所以我不能用IDE来记录webdriver脚本。 有一些HTML页面有大约100或200个文本框和下拉列表(不是精确的数字) 编写java代码来实现自动化是非常乏味的 有人能给我提供工具或实用程序来读取HTML文件本身并生成相应的代码吗? 或者指导我如何开发实用程序来满足我的需要 例如: 考虑这样一个html文件 <html> <body> <input name = "employee_name" /> <select id

我公司的网站只与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>
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("...");
提前谢谢

您应该使用“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") );
然后,最后一步,您可以使用哈希表作为输入自动生成“按定位器”


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

我也一直在寻找这样的实现。我遇到了这样一个问题:我真的不明白他们是怎么做到的。用于演示的代码是:试试看,它可能会有一些帮助。我想补充一点,如果你能找到一个可靠的工具来做到这一点,我无论如何也不会使用它-录制和播放的概念非常糟糕。是的,自动化这一切是乏味的,但它会有回报的…也许没有IE插件这样做的原因是IE的插件架构是垃圾或缺乏文档。人类世界还没有一个工具可以像高级开发人员那样自动生成可维护和优雅的UI测试代码。您可能会发现记录测试更容易,但当您开始维护测试时,您会意识到它有多糟糕。
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); 
    }