2016-07-15 14 views
1

Ich mache viele Tests, wo ich Werte in 168 Eingabefelder in einer Tabelle setzen muss. In diesem Moment verwende ich für eine Aussage wie folgt:Selenium WebDriver: Schneller Weg, um Werte in vielen Eingaben zu setzen

Es dauerte ewig, um 40 ähnliche Tests durchzuführen. Gibt es einen schnelleren Weg mit Selenium WebDriver?

+0

CssSelector ist möglicherweise schneller. Können Sie HTML und URL Ihrer Anwendung anzeigen? – Buaban

+0

Leider kann ich keine anderen Informationen über die Anwendung teilen. – user3904604

Antwort

2

Die Ausführungszeit ist proportional zur Anzahl der ausgeführten Befehle. Um es zu reduzieren, könnten Sie alle Elemente mit einem einzigen Aufruf auswählen. Sie sollten auch einen CSS-Selektor verwenden, anstatt einen XPath, wenn es möglich ist:

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; 
    } 
} 

Eine andere Möglichkeit, ein Stück Javascript injizieren würde und direcly die .value Eigenschaft zuweisen:

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

aber es könnte nicht funktionieren, wenn die Typisierung dynamisch von der Seite gehandhabt wird.

+0

Danke, die erste Option sieht gut aus. Ich werde es versuchen, wenn ich dazu in der Lage bin. – user3904604