2016-12-24 2 views
2

Ich versuche, von einem Datenlisten auswählen, aber nur das erste Element in der Liste scheint auswählbar zu sein.So wählen Sie aus einem HTML5-Datengeber mit Selenium

Dies ist ein HTML-Snippet:

<td> 
<input id="applianceFilterTextbox" class="flat" name="applianceFilter" list="applianceNames" value="ROC-1006 - B827EBB5D539" style="width: 100%"/> 
<datalist id="applianceNames"> 
<!-- ngRepeat: app in appliances --> 
<option class="ng-binding ng-scope" ng-repeat="app in appliances" value="ROC-1006 - B827EBB5D539" ng-value="app.DisplayName">ROC-1006 - B827EBB5D539</option> 
<!-- end ngRepeat: app in appliances --> 
<option class="ng-binding ng-scope" ng-repeat="app in appliances" value="ROC-1007 - B827EBD15125" ng-value="app.DisplayName">ROC-1007 - B827EBD15125</option> 
<!-- end ngRepeat: app in appliances --> 
<option class="ng-binding ng-scope" ng-repeat="app in appliances" value="ROC-1008 - B827EB05DEF3" ng-value="app.DisplayName">ROC-1008 - B827EB05DEF3</option> 
<!-- end ngRepeat: app in appliances --> 
<option class="ng-binding ng-scope" ng-repeat="app in appliances" value="ROC-1009 - B827EB2A379C" ng-value="app.DisplayName">ROC-1009 - B827EB2A379C</option> 
<!-- end ngRepeat: app in appliances --> 
</datalist> 
</td> 

Mein Modul ist wie folgt:

public void SelectApplianceFromDatalist(int index) 
{ 
    ExplicitWait.waitElementToBeClickable(driver, 25, appliancesFilterTextBox); 
    appliancesFilterTextBox.Clear(); 
    appliancesFilterTextBox.Click(); 
    string select1 = driver.FindElement(By.XPath("//*[@id='applianceNames']/option['" + index + "']")).GetAttribute("value"); 
    index++; 
    string select2 = driver.FindElement(By.XPath("//*[@id='applianceNames']/option['" + index + "']")).GetAttribute("value"); 
    index++; 
    string select3 = driver.FindElement(By.XPath("//*[@id='applianceNames']/option['" + index + "']")).GetAttribute("value"); 
    index++; 
    string select4 = driver.FindElement(By.XPath("//*[@id='applianceNames']/option['" + index + "']")).GetAttribute("value"); 

    appliancesFilterTextBox.SendKeys(driver.FindElement(By.XPath("//*[@id='applianceNames']/option['"+ index +"']")).GetAttribute("value")); 
} 

Die select1, select2, select3 und select4 sind für Debug-Zwecke nur vorhanden. Beim Aufruf des Moduls mit einem Wert von zB 3 für den Index enthalten sie alle den Wert der ersten Option.

Antwort

1

Versuchen Sie, die einfache Methode sendKeys() wie Ihren gewünschten Wert zu senden -

driver.findElement(By.id("applianceFilterTextbox")).clear(); 
    driver.findElement(By.id("applianceFilterTextbox")).sendKeys("ROC-1008 - B827EB05DEF3"); 

Es wird den Standard ausgewählten Wert löschen und Ihren gewünschten Wert ein.

Andere Sache ist, dass ich denke, Sie verwenden richtige approch, aber es ist ein kleiner Fehler in Ihrem XPath. Ändern Sie

By.XPath("//*[@id='applianceNames']/option['" + index + "']") 

zu

By.XPath("//*[@id='applianceNames']/option["+ index +"]") 
+0

Weil ich weiß nicht, was der gewünschte Wert ist, ich nicht die einfachen Tastaturbefehle verwenden können() Methode, wie Sie vorgeschlagen. Aber Sie hatten Recht mit dem kleinen Fehler im XPath-Ausdruck. Nachdem ich die einfachen führenden Zitate entfernt habe, funktioniert meine Methode gut. – Frank

Verwandte Themen