首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过Selenium和Java在下拉列表中单击文本为"Phone to call with“的元素

如何通过Selenium和Java在下拉列表中单击文本为"Phone to call with“的元素
EN

Stack Overflow用户
提问于 2018-08-11 02:52:08
回答 3查看 118关注 0票数 0

我正在尝试自动化一个有类型下拉列表的应用程序。我已经尝试了下面所有可能的组合,但无法从下拉列表中选择一个元素。

代码语言:javascript
复制
driver.findElement(By.xpath("//span[@aria-label=\"Phone to call with\"]"));

我无法通过ID找到xpath,因为它会随着重新加载而不断变化。

下面是html代码。我怎样才能达到同样的效果呢?

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-12 01:26:53

此xpath适用于您的html:

代码语言:javascript
复制
By.xpath("//md-select[normalize-space(@aria-label='Phone to call with')]")

或者您可以使用容器服务选择器:

代码语言:javascript
复制
By.cssSelector("md-select[aria-label*='Phone to call with']")

要查找选项,例如使用文本“Hangout”,您可以使用:

代码语言:javascript
复制
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:

代码语言: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);
票数 1
EN

Stack Overflow用户

发布于 2018-08-11 11:29:04

尝试使用下面的xpath:

代码语言:javascript
复制
driver.findElement(By.xpath("//span[contains(@aria-label,Phone to call with']"));
票数 0
EN

Stack Overflow用户

发布于 2018-08-11 21:19:06

如果下拉列表是由div标签开发,那么我们必须使用操作类methods.If实现自动化,您可以发送页面Url,我将发送解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51792504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档