尝试单击列表中的每个元素

时间:2018-07-23 15:45:12

标签: java selenium staleelementreferenceexception

@Test
public void homework() throws InterruptedException {
    driver.get("http://www.localhost/litecart/admin/");
    driver.findElement(By.cssSelector("td [name = username]")).sendKeys("admin");
    driver.findElement(By.cssSelector("td [name = password]")).sendKeys("admin");
    driver.findElement(By.cssSelector("div.footer [name = login]")).click();
    List<WebElement> elements = driver.findElements(By.cssSelector("ul#box-apps-menu > li"));
    for (WebElement we : elements) {
            we.click();
    }
}

这是我的代码。 elements i want to click 我只单击第一项,然后得到此“陈旧元素引用:该元素未附加到页面文档”。 单击列表项后,它将展开并显示更多子列表项,如果是导致问题的原因,请使用idk。

编辑: 这是我的操作方式,甚至包括子元素。由于下面的评论,我终于完成了这项任务。

public class HomeWork1 extends TestBase {

@Test
public void homework() throws InterruptedException {
    driver.get("http://www.localhost/litecart/admin/");
    driver.findElement(By.cssSelector("td [name = username]")).sendKeys("admin");
    driver.findElement(By.cssSelector("td [name = password]")).sendKeys("admin");
    driver.findElement(By.cssSelector("div.footer [name = login]")).click();
    List<WebElement> elements = driver.findElements(By.xpath(("//ul//li")));
    for (int i = 1; i <= elements.size(); i++) {
        driver.findElement(By.xpath("//ul[@id='box-apps-menu']/li["+i+"]")).click();
        List<WebElement> element = driver.findElements(By.xpath("//ul[@class='docs']/li"));
        for (int j = 1; j < element.size() + 1; j++){
            driver.findElement(By.xpath("//ul[@class='docs']//li["+j+"]")).click();
        }
        if (i == 17) break;
    }
}

}

1 个答案:

答案 0 :(得分:1)

或尝试

@Test
public void homework() throws InterruptedException {
    driver.get("http://www.localhost/litecart/admin/");
    driver.findElement(By.cssSelector("td [name = username]")).sendKeys("admin");
    driver.findElement(By.cssSelector("td [name = password]")).sendKeys("admin");
    driver.findElement(By.cssSelector("div.footer [name = login]")).click();
    List<WebElement> elements = driver.findElements(By.xpath("//ul//li"));
    // elements.size() will give you the total number of elements.
    for (i=1;i<=elements.size(),i++) {// This will iterate through all the elements
            driver.findElement(By.xpath("//ul/li["+i+"]")).click(); // clicking on each li element one by one
            //include wait here
    }
}

是的,如果要使用子项,则可以应用相同的逻辑。例如,您可以将以下内容用于第一个父项:

List<WebElement> elements = driver.findElements(By.xpath("//ul/li[1]/**")); // ** can be replaced by child identifiers