Dan*_*Dan 5 java selenium xpath angularjs selenium-webdriver
我正在使用 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>
Run Code Online (Sandbox Code Playgroud)
我要选择的值的 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>
Run Code Online (Sandbox Code Playgroud)
下拉列表//*[@id="select_0Q9"]
的 xpath 是下拉值的 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);
Run Code Online (Sandbox Code Playgroud)
请根据您的方便随意在上面的代码中找到该元素。
根据我的说法,你的下拉菜单的 xpath 应该如下所示:-
//md-option[@id='select_option_0QD']
Run Code Online (Sandbox Code Playgroud)
我想单击的第一个 div 的 xpath 是:-
//md-option[@id='select_option_0QD']/div[1]
Run Code Online (Sandbox Code Playgroud)
如果您想要第二个值,请将 [1] 更改为 [2]。
另一方面,您还可以将所有元素存储在列表中(正如您所知,您不能使用选择),然后根据您的需要或全部单击它们。
为此,您需要使用 xpath,例如:-
//md-option[@id='select_option_0QD']/div
Run Code Online (Sandbox Code Playgroud)
现在将其实现为代码:-
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);
}
Run Code Online (Sandbox Code Playgroud)
希望它能帮助你:)