java - 使用 Selenium Webdriver 从 <md-select> 标签中选择一个值

标签 java angularjs selenium xpath selenium-webdriver

我正在使用 Selenium Webdriver 并致力于在 Chrome 上自动化 AngularJS Web 应用程序。在我点击应用程序上的下拉列表之前,一切进展顺利。 每次我尝试从中选择一个值时,我的测试都会崩溃。我一直在做这方面的研究,但我只看到了 2 个解决方案(我都尝试过但都没有用)

  1. 使用Select目的。这不起作用,因为 html 标签不是 <select> , 它的 <md-select>这未通过测试。
  2. 然后我尝试只点击下拉元素并点击值 - driver.findElement(By.xpath("xpath to dropdown list")).click();driver.findElement(By.xpath("xpath do dropdown value")).click();

对于示例 2,我还尝试将其创建为 WebElement变量和调用 click()分开,但这也不起作用。

关于如何解决这个问题有什么想法吗?

更新

下拉列表的 HTML

<div ng-switch-when="dropdown" class="ng-scope">
    <zf-form-dropdown>
        <div class="dropdown">
            <div layout="row">
                <div flex="50" class="quote-label">
                    <p ng-bind-html="::label" class="ng-binding">Title</p>
                </div>
                <div ng-show="false" flex="10" class="tooltip-icon ng-hide" ng-click="showToolTip(field.get('toolTip'))" role="button" tabindex="0" aria-hidden="true"><img src="img/item-question@2x.png"></div>

                <md-select flex="" ng-disabled="quote.isRated() || !input.enabled" ng-change="onDropdownChange()" ng-model="input.value" class="ng-valid md-default-theme ng-touched ng-dirty" role="combobox" id="select_0Q9" aria-haspopup="true" aria-expanded="false" aria-labelledby="select_label_0I1" tabindex="0" aria-disabled="false" aria-invalid="false" aria-owns="select_menu_0Q8"><md-select-label class="md-select-label md-placeholder" id="select_label_0I1"><span></span><span class="md-select-icon" aria-hidden="true"></span></md-select-label></md-select>
            </div>
        </div>
    </zf-form-dropdown>
</div>

我要选择的值的 HTML

<md-option ng-value="::item.val" ng-selected="item.checked" ng-repeat="item in getOpts()" tabindex="0" class="ng-scope" role="option" aria-selected="false" id="select_option_0QD" value="MR">
    <div class="md-text ng-binding">Mr</div>
    <div class="md-ripple-container"></div>
</md-option>

下拉列表的 xpath 是 //*[@id="select_0Q9"] 下拉值的 xpath 是 //*[@id="select_option_0QD"]

最佳答案

如果您确定您的 Xpath 没问题,那么您也可以单击使用 javascriptexecutor,如下所示尝试一下:-

WebElement element= driver.findElement(By.xpath("//md-option[@id='select_option_0QD']/div[1]"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

请根据您的方便随意定位上述代码中的元素。

按照我的说法,您的下拉列表的 xpath 应该如下所示:-

//md-option[@id='select_option_0QD']

我想我想点击的第一个 div 的 xpath 是:-

//md-option[@id='select_option_0QD']/div[1]

如果您想要第二个值,请将 [1] 更改为 [2]。

另一方面,您还可以将所有元素存储在列表中(如您所知,您不能使用选择)并根据需要或全部单击它们。

为此,您需要像这样使用 xpath:-

//md-option[@id='select_option_0QD']/div

现在将它实现到代码中:-

List<WebElement> allelemts = driver.findElements(By.xpath("//md-option[@id='select_option_0QD']/div"));
  for(WebElement ele: allelemts){

    driver.findElement(By.xpath("//md-option[@id='select_option_0QD']")).click();

    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].click();", ele);

  }

希望对你有帮助:)

关于java - 使用 Selenium Webdriver 从 <md-select> 标签中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33130214/

相关文章:

Ruby/Selenium 问题识别列表中显示的项目

javascript - 切换窗口句柄并按 Enter

java - 如何从 java 中的非轻量级组件获取 BufferedImage?

javascript - AngularJS - 如何绑定(bind)到指令内的 ngRepeat 元素

java - IntelliJ : add formatter:off/on comments around selected block

javascript - 自动完成表单中的必填输入字段

javascript - 如何在 Angular 中仅按一个值过滤数据?

python - selenium PhantomJS send_keys 不起作用

java - 如何从 Java 代码运行 sed 命令

java - WebHDFS Java 客户端未正确处理 Kerberos token