我正在尝试自动化一个有类型下拉列表的应用程序。我已经尝试了下面所有可能的组合,但无法从下拉列表中选择一个元素。
driver.findElement(By.xpath("//span[@aria-label=\"Phone to call with\"]"));
我无法通过ID找到xpath,因为它会随着重新加载而不断变化。
下面是html代码。我怎样才能达到同样的效果呢?
<md-select ng-model="ctrl.selectedLinkedPhone" class="ng-pristine ng-valid ng-empty ng-touched" tabindex="0" aria-disabled="false" role="listbox" aria-expanded="false" aria-multiselectable="false" id="select_26" aria-invalid="false" aria-label="
Phone to call with
" style=""><md-select-value class="md-select-value md-select-placeholder" id="select_value_label_25"><span>
Phone to call with
</span><span class="md-select-icon" aria-hidden="true"></span></md-select-value><div class="md-select-menu-container" aria-hidden="true" role="presentation" id="select_container_27"><md-select-menu role="presentation" class="_md"><md-content class="_md">
<!----><md-option ng-disabled="!ctrl.isLinkedPhoneCurrentlyVerified(linkedPhone)" ng-repeat="linkedPhone in ctrl.getLinkedPhones()" ng-value="linkedPhone" tabindex="0" class="md-ink-ripple" role="option" aria-selected="false" id="select_option_29" aria-checked="true" aria-disabled="false" value="[object Object]" style=""><div class="md-text">
Phone 1
</div></md-option><!----><md-option ng-disabled="!ctrl.isLinkedPhoneCurrentlyVerified(linkedPhone)" ng-repeat="linkedPhone in ctrl.getLinkedPhones()" ng-value="linkedPhone" tabindex="0" class="md-ink-ripple" role="option" aria-selected="false" id="select_option_30" aria-checked="true" aria-disabled="false" value="[object Object]" style=""><div class="md-text">
Phone 2
</div></md-option><!----><md-option ng-disabled="!ctrl.isLinkedPhoneCurrentlyVerified(linkedPhone)" ng-repeat="linkedPhone in ctrl.getLinkedPhones()" ng-value="linkedPhone" tabindex="0" class="md-ink-ripple" role="option" aria-selected="false" id="select_option_31" aria-checked="true" aria-disabled="false" value="[object Object]" style=""><div class="md-text">
Hangouts
</div></md-option><!---->
</md-content></md-select-menu></div></md-select>
发布于 2018-08-12 01:26:53
此xpath适用于您的html:
By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]")
或者您可以使用容器服务选择器:
By.cssSelector("md-select[aria-label*='Phone to call with']")
要查找选项,例如使用文本“Hangout”,您可以使用:
By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]//md-option[normalize-space(.)='Hangouts']")
要选择dropdown,你可以使用下面的Action类或2个方法,实现所需的等待: 1.假设你没有打开dropdown的特殊按钮,点击dropdown将打开它。2.使用javascript:
WebElement selectMenu = driver.findElement(By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]"));
WebElement option = driver.findElement(By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]//md-option[normalize-space(.)='Hangouts']"));
//1. first click to open dropdown, second click on option
selectMenu.click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(option)).click();
//2. select using javascript
((JavascriptExecutor) driver).executeScript("arguments[0].click();", option);
发布于 2018-08-11 11:29:04
尝试使用下面的xpath:
driver.findElement(By.xpath("//span[contains(@aria-label,Phone to call with']"));
发布于 2018-08-11 21:19:06
如果下拉列表是由div标签开发,那么我们必须使用操作类methods.If实现自动化,您可以发送页面Url,我将发送解决方案。
https://stackoverflow.com/questions/51792504
复制相似问题