我正在使用 Selenium Webdriver 并致力于在 Chrome 上自动化 AngularJS Web 应用程序。在我点击应用程序上的下拉列表之前,一切进展顺利。 每次我尝试从中选择一个值时,我的测试都会崩溃。我一直在做这方面的研究,但我只看到了 2 个解决方案(我都尝试过但都没有用)
- 使用
Select
目的。这不起作用,因为 html 标签不是<select>
, 它的<md-select>
这未通过测试。 - 然后我尝试只点击下拉元素并点击值 -
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/