如何从Selenium中基于<input />的下拉菜单中选择选项?

时间:2016-04-01 15:03:37

标签: c# selenium selenium-webdriver

我测试的网站是使用Visual Studio C#构建的。我要测试的下拉菜单不使用通常的格式:

<select>
    <option>...</option>
    ...
    ...
</select>

相反,他们已经建立了:

<input name="exampleName" type="text" class="rcbInput" id="exampleInput"
  value="exampleValue" readonly="readonly" autocomplete="off">

每个值在代码中显示为列表项下方。

每个列表项都在以下结构中:

表单&gt; rcbSlide&gt; ...&gt; rcbList&gt; ul&gt; li

其中li对象是下拉菜单中的值。

我想知道的是,如何在此结构中选择下拉值?

当我使用标准

Select select = new Select(driver.findElement(By.whatever()))

它给出了一个错误,说明了“选择&#39;预期,得到了输入&#39;。

3 个答案:

答案 0 :(得分:1)

您无法使用Select类来处理此下拉列表 - 它仅适用于选择选项常规下拉列表。而是打开下拉列表并手动选择选项:

driver.findElement(By.cssSelector('input[value="exampleValue"]')).click();

答案 1 :(得分:0)

为此,您需要先找到输入标签。这会将所有值添加到List集合中。现在使用for循环遍历它并单击所需元素

WebElement dpdown = driver.findElement(By.xpath(&#34; //输入[@id =&#39; exampleName&#39;]&#34;));

List<WebElement> dpListValues=dpdown.findElements(By.tagName("li")); 

 for (int i=0; i<dpListValues.size();i++)
 {
  if ((dpListValues.get(i).getText()).equals("valueYouWantToSelect)"))
    {
        dpListValues.get(i).click();
    }
 }

 }

答案 2 :(得分:0)

为了选择这些值,我们可以在xpath定位器中使用text()方法。请在下面找到代码段。

driver.findElement(By.xpath('.//*li[text()="Value"]')).click();

如果你想循环遍历所有&#34; li&#34;元素,请使用下面的代码。

List<WebElement> options = driver.findElements(By.xPath(<locator to find the parent node of all li tags>)).getTagName("li");

for(WebElement eachOpt : options) {
   <Array to store all values> = eachOpt.getText();
   // Logic you want to implement
}

希望这会有所帮助。如果您在使用代码时遇到任何问题,请与我们联系。