尝试使用自定义 css 选择器使用 Selenium 和 Java 获取下拉列表中的所有选项

问题描述 投票:0回答:1

我们网页中的下拉菜单不使用常见的选择标签或 Li 标签。这使得在 WebElement 列表中提取和存储列表项文本变得困难。这是 DOM 和下拉列表 Vs 的图像,我还提供了我正在尝试编写的代码

`WebDriver 驱动程序 = getDriver();

    List<WebElement> teachers = driver.findElements(By.cssSelector(".rc-virtual-list-holder-inner>div>div"));
    for (WebElement myElement : teachers) {
        
        System.out.println(myElement.getText());`

java selenium-webdriver selenium-chromedriver browser-automation
1个回答
0
投票

给定 HTML...

html

要理想地打印项目文本,您需要为 visibilityOfAllElementsLocatedBy() 引入 WebDriverWait,您可以使用以下 定位器策略

  • 使用cssSelector

    List<WebElement> elements = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.rc-virtual-list-holder-inner div[title] > div")));
    for(WebElement element : elements)
    {
      System.out.println(element.getText());
    }
    
  • 使用xpath

    List<WebElement> elements = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class="rc-virtual-list-holder-inner"]//div[@title]/div")));
    for(WebElement element : elements)
    {
      System.out.println(element.getText());
    }
    

使用Java8的

stream()
map()
您可以使用以下定位器策略

  • 使用cssSelector

    System.out.println(new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.rc-virtual-list-holder-inner div[title] > div"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    
  • 使用xpath

    System.out.println(new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class="rc-virtual-list-holder-inner"]//div[@title]/div"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    
© www.soinside.com 2019 - 2024. All rights reserved.