2016-07-15 26 views
1

我正在做很多测试,我必须将值放入表中的168个输入字段。在这一刻,我用这样的陈述:Selenium WebDriver:更快地设置许多输入值的方法

for (int i = 1; i < numberOfValues + 1; i++) { 
    try { 
     findingElement.byXPath(".//*[@id='TDCON']/tbody/tr[" + i + "]/td[4]/span/span[2]/span/span/input").sendKeys(Keys.chord(Keys.CONTROL, "a"), value); 
    }catch (NoSuchElementException ex) { 
      break; 
    } 
} 

它花了时间去执行40个类似于这个测试。有没有更快的方式使用Selenium WebDriver?

+0

CssSelector可能会更快。你能显示你的应用程序的HTML和URL吗? – Buaban

+0

不幸的是,我无法分享任何有关应用程序的其他信息。 – user3904604

回答

2

执行时间与执行的命令数成正比。所以为了减少它,你可以通过一次调用来选择所有的元素。你也应该使用CSS选择器,而不是当它是可能的XPath:

List<WebElement> elements = driver.findElements(By.cssSelector(
    "#TDCON > tbody > tr > td:nth-child(4) > span > span:nth-child(2) > span > span > input")); 

for (int i = 0; i < numberOfValues; i++) { 
    try { 
     elements[i].sendKeys(Keys.chord(Keys.CONTROL, "a"), value); 
    }catch (NoSuchElementException ex) { 
      break; 
    } 
} 

另一种方式是注入一段JavaScript和direcly分配.value属性:

((JavascriptExecutor)driver).executeScript(
    "var cells = arguments[0].querySelectorAll('#TDCON > tbody > tr > td:nth-child(4)'); " + 
    "var values = arguments[1]; " + 
    "for(var i = 0; i < values.length; ++i) { " + 
    " cells[i].querySelector('span > span:nth-child(2) > span > span > input').value = values[i]; " + 
    "} " 
    , findElement, values); 

但可能无法如果输入由页面动态处理,则工作。

+0

谢谢,第一个选项看起来不错。我会尽力,当我能够。 – user3904604

相关问题