Java Selenium错误:陈旧元素引用:元素未附加到页面文档

时间:2018-01-13 10:12:37

标签: selenium select arraylist

我使用List Element和For loop Conditions创建了以下脚本。 请查看我的方案

情境:

  1. 打开主页>点击下拉菜单>打开下拉列表。

  2. 点击第一个选项>重定向到特定屏幕并验证标题。

  3. 返回同一个屏幕,同样的情景将会跟随4次。

  4. 当我在Eclipse中执行我的下面脚本时,我发现了错误。 在我的下面编码中,第一次点击是有效的,但是第二次点击在我的下拉列表中不起作用。

    @Test
    public void  toVerifyHelpLink() throws IOException, InterruptedException{
            File src = new File("Object_Repo.properties");
            FileInputStream fis = new FileInputStream(src);
            pro = new Properties();
            pro.load(fis);
    
            Thread.sleep(2000);
             WebElement linksdiv = driver.findElement(By.xpath(pro.getProperty("new_ul")));
             List<WebElement> Links = linksdiv.findElements(By.tagName("a"));
             System.out.println(Links.size());  
             for(int i=0; i<= Links.size()-1; i++)
         {
           driver.findElement(By.xpath(pro.getProperty("customerservice"))).click();
           String subCategory = Links.get(i).getText();     
           System.out.println(subCategory);
           Links.get(i).click();
                if(!subCategory.equalsIgnoreCase("404")){
                    System.out.println("Title displaying as exepected");
                }
            driver.navigate().back();
            linksdiv = driver.findElement(By.xpath(pro.getProperty("new_ul")));
            Thread.sleep(2000);
        }
    }
    

    这是HTML结构如下

    <div class="customer-service effect">
    <a href="">customer service</a>
    <ul>
    <li><a href="">Help</a></li>
    <li><a href="">FAQs</a></li>
    <li><a href="">Contact Us</a></li>
    <li><a href="">Shipping and Returns</a></li>
    </ul>
    </div>
    

2 个答案:

答案 0 :(得分:0)

尝试在for循环中再添加一行:

driver.navigate().back();
linksdiv = driver.findElement(By.xpath(pro.getProperty("new_ul")));
Links = linksdiv.findElements(By.tagName("a")); // add this line to find all "a" again

答案 1 :(得分:0)

陈旧元素异常 - 告诉您页面已更改,但您的网页元素实例未更改。这意味着当您的页面的HTML代码发生变化时,您应该再次找到该元素,因为html已更改。这就是硒的作用方式。

此外,我发现您的代码中存在典型错误,请查看: http://selenide.org/

不要使用线程睡眠: https://saucelabs.com/blog/how-to-avoid-threadsleep-in-test-automation