有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我无法在Selenium中找到下拉列表的xpath

enter image description here我无法在Selenium中找到/找到下拉列表的xpath,下拉列表是用div标记编写的,悬停时属性(aria activegender)值正在更改。一旦在下拉列表中选择了值,属性(aria Active子孙)值就会消失

有人能帮我找到这个的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();
}
}
}
}

共 (3) 个答案

  1. # 1 楼答案

    感谢@Cruisepandey和@Andrei Suvorkov,我使用下面的代码在下拉列表中找到并输入选项

    WebElement projectType = driver.findElement(By.id("_value"));
    projectType.sendKeys("New Product Introduction");
    projectType.sendKeys(Keys.ENTER);
    
  2. # 2 楼答案

    试试这个:

    ...
    WebDriverWait wait = new WebDriverWait(driver,10);
    WebElement option = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(., 'New Product Introduction')]")));
    option.click();
    ...
    

    而不是:

    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();
       }
    }
    

    单击打开下拉列表后,等待元素可单击,然后单击它

  3. # 3 楼答案

    css选择器将是:

    div.DropdownWidget -dropdown_value.DropdownWidget -placeholder>span.DropdownWidget -accessibilityhidden
    

    更新:

    下拉列表是使用divspan标记构建的

    代码您可以尝试:

    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();
    }
    }