有两件事:
- 您的脚本按预期打印前两页的结果。
- 当您
printlinksName()
第一次打电话时,它可以工作。 - 接下来,您将在
Generic List
的类型中存储10个页码WebElement
。 - 第一次在
for()
循环中单击WebElement
的Page 2
,然后通过调用打印所有链接printlinksName()
。 - 在循环内进行第二次迭代时
for()
,List<WebElement> fivelinks
由于DOM已更改,因此对的引用也会丢失。因此,您看到了StaleElementReferenceException
。
解
一个避免的简单解决方案 StaleElementReferenceException
是
List<WebElement>fivelinks=driver.findElements(By.xpath(".//*[@id='nav']/tbody/tr/td/a"));在for()循环中移动代码行。因此,您的代码块将如下所示:
import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class Q44970712_stale { static WebDriver driver = null; public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", "C:\Utility\BrowserDrivers\geckodriver.exe"); driver=new FirefoxDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.google.co.in/"); //driver.findElement(By.xpath("//input[]")).sendKeys("Banduchode");; WebElement search=driver.findElement(By.cssSelector("input#lst-ib")); search.sendKeys("Banduchode"); search.sendKeys(Keys.ENTER); printlinksName(); for(int i=0;i<5;i++) { List<WebElement> fivelinks=driver.findElements(By.xpath(".//*[@id='nav']/tbody/tr/td/a")); System.out.println(fivelinks.get(i).getText()); fivelinks.get(i).click(); Thread.sleep(5000); printlinksName(); } } public static void printlinksName() throws InterruptedException { List<WebElement> alllinks=driver.findElements(By.xpath("//*[@id='rso']/div/div/div/div/div/h3/a")); System.out.println(alllinks.size()); //print all list for(int i=0;i<alllinks.size();i++) { System.out.println("Sno"+(i+1)+":"+alllinks.get(i).getText()); }} }注意:在此简单的解决方案中,当您完成第二页的打印时,下一次将
List<WebElement> fivelinks通过xpathwith
创建.//*[@id='nav']/tbody/tr/td/a时,Page 1
是第一个存储在fivelinks列表中的元素。因此,您可能会再次重定向到Page 1
。为避免这种情况,您可以考虑xpath使用适当的索引帮助。



