【发布时间】:2018-07-08 04:51:54
【问题描述】:
我无法在 Selenium 中找到/找到下拉列表的 xpath,下拉列表是用 div 标签编写的,并且属性(aria-activedescendant)值在悬停时发生变化。一旦下拉列表中选择的值,属性(aria-activedescendant)值就会消失。
有谁能帮我找到 xpath 吗?提前致谢。
HTML如下:
<div class="DropdownWidget---dropdown_value DropdownWidget---placeholder"
id="189d67819beda8ebc9b5a2b7554f80f1_value"
role="listbox"
tabindex="0"
aria-controls="189d67819beda8ebc9b5a2b7554f80f1_list"
aria-expanded="false"
aria-activedescendant=""
aria-labelledby="189d67819beda8ebc9b5a2b7554f80f1"
aria-describedby="189d67819beda8ebc9b5a2b7554f80f1_selectedChoice"
aria-required="true">
<!-- react-text: 38 -->- Please Select a Value -<!-- /react-text -->
<span id="189d67819beda8ebc9b5a2b7554f80f1_selectedChoice"
class="DropdownWidget---accessibilityhidden">- Please Select a Value -</span>
</div>
鼠标悬停时属性的值如下变化:
aria-activedescendant=189d67819beda8ebc9b5a2b7554f80f1_list_0
aria-activedescendant=189d67819beda8ebc9b5a2b7554f80f1_list_1
aria-activedescendant=189d67819beda8ebc9b5a2b7554f80f1_list_2
aria-activedescendant=189d67819beda8ebc9b5a2b7554f80f1_list_3
下面是选项的检查代码:
<div class="DropdownWidget---dropdown_value DropdownWidget---placeholder" id="189d67819beda8ebc9b5a2b7554f80f1_value" role="listbox" tabindex="0" aria-controls="189d67819beda8ebc9b5a2b7554f80f1_list" aria-expanded="true" aria-activedescendant="189d67819beda8ebc9b5a2b7554f80f1_list_2"
aria-labelledby="189d67819beda8ebc9b5a2b7554f80f1" aria-describedby="189d67819beda8ebc9b5a2b7554f80f1_selectedChoice" aria-required="true">
<!-- react-text: 38 -->- Please Select a Value -
<!-- /react-text --><span id="189d67819beda8ebc9b5a2b7554f80f1_selectedChoice" class="DropdownWidget---accessibilityhidden">- Please Select a Value -</span></div>
**Class used for dropdown selection**
public class Page2_ProjectType {
WebDriver driver;
public Page2_ProjectType(WebDriver driver) {
this.driver = driver;
}
public void MethodHome_ProjectType() throws InterruptedException {
Thread.sleep(5000);
WebElement Btncreatenew = driver.findElement(By.xpath("//*[@id=\"appian-body\"]/div/div/div/div/div/div[2]/div/div[2]/div/div/div/div/div/div/div[1]/div/div[2]/div/a/img"));
Btncreatenew.click();
Thread.sleep(5000);
WebElement DDprojecttype = driver.findElement(By.id("189d67819beda8ebc9b5a2b7554f80f1_value"));
DDprojecttype.click();
String value = DDprojecttype.getAttribute("aria-activedescendant");
System.out.println(value);
List<WebElement> options = driver.findElements(By.cssSelector("div.DropdownWidget---dropdown_value.DropdownWidget---placeholder>span"));
for(WebElement element : options){
if(element.getText().equals("New Product Introduction")){
element.click();
}
}
}
}
【问题讨论】:
-
为什么会有人关心由 JS 或任何其他编程语言动态生成的属性值。如果您想选择下拉值,我认为 aria-activedescendant 根本不重要。
-
@cruisepandey WebDriver 需要选择动态变化的值之一。下拉菜单中可用的选项与属性“aria-activedescendant”相关。你能建议任何其他方法来解决这个问题吗?
-
您能否向我们展示您的代码并以 HTML 格式下拉值
-
没有关于下拉选项的html代码,只有属性值在改变,导致span标签值也是如此。
-
当您手动单击 please select a value 时,我可以看到正在填充 3 个选项。只需将鼠标悬停在这些选项上并检查元素并共享相同内容。
标签: java selenium selenium-webdriver xpath drop-down-menu