继续滚动一个部分,直到父标记属性在 Selenium WebDriver 中为 "disabled"

Keep scrolling a section until parent tag attribute is "disabled" in Selenium WebDriver

我的应用程序有几个带图片的部分,每个部分都有一个滚动条 link 可以向右滚动

<div class="owl-next">
  <i class="fa fa-angle-right">

当您无法再滚动时,div class 属性更改为“owl-next-disabled”。我希望能够滚动到每个部分的最后一张图片。我已经能够在下面的代码中使用一个 'for' 循环来遍历 div webelements 但在循环中我只能在元素未找到异常抛出之前单击一次,因为 owl-未找到下一个禁用的。

List<WebElement> divtag=driver.findElements(By.xpath("//div[@class='owl-next']"));
    Thread.sleep(1000);
    int i=1;
    if(divtag!=null)
    {
       for(WebElement clickright:divtag)
            {
                
                WebElement rightscroll=driver.findElement(By.xpath("//div/i[@class='fa fa-angle-right']"));
                rightscroll.click();
                WebElement ele=driver.findElement(By.xpath("//div/i[@class='owl-next disabled']"))!=null)
                        
            }
                            
        }   
    }
                    

如何滚动直到 div 标签的属性为 'owl-next disabled'?

问题是这样的:

  1. 您点击 () 向右滚动。
  2. 您试图找到 'owl-next disabled',但找不到,因为您需要滚动更多

你想要的是检查一个元素是否存在,如果不存在继续点击向右走。 findElement() 必须找到一个元素,否则它会抛出错误,findElements() 给出一个可能为空的列表。

for(WebElement clickright : divtag)
{   
    while(true){        
        WebElement rightscroll=driver.findElement(By.xpath("//div/i[@class='fa fa-angle-right']"));
        rightscroll.click();
        List<WebElement> endList = driver.findElement(By.xpath("//div/i[@class='owl-next disabled']"))!=null);
        if(endList.Count() == 0)
            break;
    }
}

添加一个 'safety',如有必要,它会在 100 次右键单击后停止

while(true)
{
    WebElement parent = clickright.findElement(By.xpath("./.."));
    if(parent.getAttribute("class").equalsIgnoreCase("owl-next disabled"))
        break;
    System.out.println(clickright.getAttribute("class"));       
    clickright.click();                         
}

已检索到父标签并与禁用的文本进行比较,现在可以使用了。