我試圖查看是否顯示了特定元素,然后執行搜索 n 次,否則中斷回圈,并繼續執行 Selenium 中的其他操作。
一旦行元素可見,腳本就會停止,而不是在回圈外繼續執行代碼。
Boolean row = driver.findElement(By.xpath("//*[contains(text(),'mytext')]")).isDisplayed();
if (row){
for (int i = 0; i < 50; i ){
Thread.sleep(1000);
action.sendKeys(Keys.TAB).build().perform();
Search.click();
if (row == false){
break;
}
}
}
driver.findElement(By.xpath(something)).click();
一旦行元素可見,腳本就會停止,而不是繼續回圈外的代碼。
uj5u.com熱心網友回復:
基本上問題是,.isDisplayed();如果找到網路元素,您正在使用哪個效果很好。它會回傳是。如果未顯示 web 元素,大多數情況下您將不會獲得此類元素例外。
不幸的是,.isDisplayed();沒有有效地處理這個例外。
作為一種解決方法,我建議使用findElementswhich 將回傳一個網路元素串列(如果找到),否則回傳一個空串列。
List<WebElement> rows = driver.findElements(By.xpath("//*[contains(text(),'mytext')]"));
if (rows.size() > 0){
System.out.println("row is visible");
for (int i = 0; i < 50; i ){
Thread.sleep(1000);
action.sendKeys(Keys.TAB).build().perform();
Search.click();
List<WebElement> rowsStatus = driver.findElements(By.xpath("//*[contains(text(),'mytext')]"));
if (rowsStatus.size() > 0 ) {
continue;
}
else {
System.out.println(" exiting the loop if rows is found in for loop early");
break;
}
}
}
else {
System.out.println("Row is not visible, do something here to make it visible.");
}
driver.findElement(By.xpath(something)).click();
uj5u.com熱心網友回復:
您也應該在for回圈中添加此顯示功能。只有這樣回圈才會被打破。
// list of options which has more money
for (int i = 0; i < 50; i ){
Thread.sleep(1000);
action.sendKeys(Keys.TAB).build().perform();
Search.click();
row = driver.findElement(By.xpath("//*[contains(text(),'mytext')]")).isDisplayed();
if (row == false){
break;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339775.html
上一篇:如何從需要使用scrapy-selenium單擊的選項卡抓取頁面
下一篇:保持輸入LMC的數字總數
