如何使用Selenium从下拉列表中选择值?

时间:2016-07-07 06:59:07

标签: javascript java selenium

以下是一段代表下拉列表的代码。 我需要在此下拉列表中选择日期值,表示为<option value="1" label="Date">Date</option>

<select id="type" class="text-input ng-pristine ng-valid ng-scope ng-touched" ng-style="cssStyle" name="type" ng-if="!options.hidePlaceholder" ng-model="result.type" qmx-observe-value="text" ng-disabled="options.readonly" ng-options="obj.value as obj.text group by obj.groupby for obj in selectData" style="font-size: 13px; opacity: 1; width: 100%;">
    <option class="ng-binding" value="">----</option>
    <option value="0" selected="selected" label="Text">Text</option>
    <option value="1" label="Date">Date</option>
    <option value="2" label="Numeric">Numeric</option>
    <option value="3" label="Switch">Switch</option>
    <option value="4" label="Map Location Marker">Map Location Marker</option>
    <option value="5" label="Picker">Picker</option>
    <option value="6" label="List">List</option>
    </select>

以下方法无效。
1.)通过导入 org.openqa.selenium.support.ui.Select

,使用选择选择此值
Select elm = new Select(driver.findElement(By.xpath(".//*[@id='type']/option[3]")));
  elm.selectByVisibleText("Date");

控制台显示:

  

元素应该是“选择”但是“选项”


2.)首先点击下拉列表以显示要选择的选项,然后单击该选项。

driver.findElement(By.xpath(".//*[@id='type']")).click();
driver.findElement(By.xpath(".//*[@id='type']/option[3]")).click();

控制台显示:

  

DEBUG元素缺少一个可访问的名称:id:type,tagName:   SELECT,className:text-input ng-pristine ng-untouched ng-valid   NG-范围


3.使用JavascriptExecutor获取点击。

driver.findElement(By.xpath(".//*[@id='type']")).click();    
((JavascriptExecutor)driver).executeScript("arguments[0].click();", driver.findElement(By.xpath(".//*[@id='type']/option[3]")));

控制台显示:

  

DEBUG元素缺少一个可访问的名称:id:type,tagName:   SELECT,className:text-input ng-pristine ng-untouched ng-valid   NG-范围


4.)使用鼠标悬停选项在下拉菜单中选择,然后点击它。

driver.findElement(By.xpath(".//*[@id='type']")).click();    
WebElement subdrop = driver.findElement(By.xpath(".//*[@id='type']/option[3]"));
        Actions action = new Actions(drive);
        action.moveToElement(subdrop).perform();
        Custom.Twait();
        action.click(subdrop).perform();

控制台显示:

  

线程“main”中的异常   org.openqa.selenium.UnsupportedCommandException:POST   / session / a37a745a-e40c-45a9-9760-8e01b451a017 / moveto不符合   已知命令(警告:服务器未提供任何堆栈跟踪   信息)

我还添加了Wait in Between我正在使用此代码。为简单起见,我没有包含它。

需要帮助。

1 个答案:

答案 0 :(得分:3)

在您的第一个选项中,selenium清楚地说元素应该是“选择”但是“选项”,这意味着您在为xpath提供option而只期待xpath用于选择。

不需要使用您提供的其他选项,只需使用下面的第一个选项: -

Select elm = new Select(driver.findElement(By.id("type")));
elm.selectByVisibleText("Date");

ByIndex

elm.selectByIndex(2);

ByValue

elm.selectByValue("1");

如果您的第一个选项不幸无效,我希望您使用第三个选项使用JavascriptExecutor,如下所示: -

WebElement select = driver.findElement(By.id("type"));

((JavascriptExecutor)driver).executeScript("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", select, "Date");

希望它会帮助你...... :)