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

hec6srdp  于 2023-03-18  发布在  Java
关注(0)|答案(1)|浏览(94)

我们网页中的下拉列表不使用常见的选择标签或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());`

i86rm4rw

i86rm4rw1#

给定HTML...

理想情况下,要打印项目文本,您需要为visibilityOfAllElementsLocatedBy()引入WebDriverWait,您可以使用以下locator strategies

  • 使用 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(),您可以使用以下locator strategies

  • 使用 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()));

相关问题