我必須從博客中向下滾動文章串列,直到找到特定文章。為此,有一個“加載更多”按鈕,它會為您提供越來越多的文章,直到沒有更多文章要加載,所以按鈕消失,它被禁用(至少我是這么認為的)。
我的想法是有一個“while”回圈,直到按鈕被禁用,同時它會檢查請求的文章是否出現:
public void scrollIntoArticle(String title){
while(loadMoreBtn.isEnabled()){
for(WebElement article : articlesList){
if(article.getText().equals(title)){
scrollInto(article);
hoverAndClick(article);
break;
} else{
scrollInto(lastArticle());
hoverAndClick(loadMoreBtn);
}
}
}
}
但是,它不斷收到錯誤訊息:“等待元素的可見性”。嘗試使用“isDisplayed”我遇到了同樣的問題。
所以顯然該按鈕永遠不會被“禁用”。該元素唯一發生的事情是在 HTML 上獲得一個新屬性:style="display: none;"。對于 Selenium,“isEnabled”始終為真,因此回圈繼續進行,“等待元素的可見性”。
我被卡住了,不知道在不檢查“加載更多”按鈕的情況下我可以使用什么條件來檢查是否所有文章都已加載。有什么建議么?感謝幫助!
uj5u.com熱心網友回復:
您可以等待元素的屬性發生變化,只需使用ExpectedCondition 類 ,例如:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
wait.until(ExpectedConditions.attributeToBe(buttonWebElement, "style", "display: none;")
或等待與屬性一起顯示的元素,例如:
wait.visibilityOf(driver.findElement(By.xpath("//button[@style='display: none;']")))
uj5u.com熱心網友回復:
最后,我對 Load More 按鈕使用了 try/catch。因此,當它不能更“可點擊”時,它會拋出例外。
其他人提到的“isDisplayed”,“isEnabled”,ExpectedConditions.attributeToBe 不起作用。
這是代碼:
public void goToArticle(String title){
int count = 0;
while(true){
for(WebElement article:articlesLink){
if(article.getText().equals(title)){
scrollIntoCenter(article);
clickArticle(article);
break;
} else {
scrollIntoCenter(lastArticle());
}
}
try {
hoverAndClick(loadMoreBtn);
} catch (Exception e) {
System.out.println("No more load button");
count ;
if (count > 1){
System.out.println("No article found");
break;
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/482288.html