栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

尝试打印链接名称时获取StaleElementReferenceException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试打印链接名称时获取StaleElementReferenceException

有两件事:

  1. 您的脚本按预期打印前两页的结果。
  2. 当您
    printlinksName()
    第一次打电话时,它可以工作。
  3. 接下来,您将在
    Generic List
    的类型中存储10个页码
    WebElement
  4. 第一次在
    for()
    循环中单击
    WebElement
    Page 2
    ,然后通过调用打印所有链接
    printlinksName()
  5. 在循环内进行第二次迭代时
    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
通过
xpath
with
创建
.//*[@id='nav']/tbody/tr/td/a
时,
Page 1

是第一个存储在
fivelinks
列表中的元素。因此,您可能会再次重定向到
Page 1

。为避免这种情况,您可以考虑
xpath
使用适当的索引帮助。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号