有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在缓存中找不到java元素可能页面在查找后发生了更改为什么?

我是这个领域的新手,我想问一下,如果我试图实现这个场景,我该如何循环:(涉及SELENIUM和WEBDRIVER的JAVA代码)

  • 我在一个列表视图上,例如帐户模块。然后,在account模块中,如果有分页(单击按钮以获取更多帐户),我将单击它,当listview中没有更多分页时,我将执行一段代码

  • 如果listview中没有分页,那么我将自动执行一段代码

如果listview中不再出现“单击以获取更多帐户”,我想执行以下代码块

    List<WebElement> button = driver.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button"));
    for(WebElement click:button){
        while(click.isDisplayed()){

            WebDriverWait JEAN11 = new WebDriverWait(driver, 100);
            JEAN11.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button")));
            click.click();
            Thread.sleep(4000);

        }
        WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
        List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
        System.out.println("Total Number of TR: " + list.size());

    }

为什么我收到Element not found in the cache - perhaps the page has changed since it was looked up


共 (1) 个答案

  1. # 1 楼答案

    我建议你

    1-分别勾选“点击查看更多账户”和“TR总数”:

    2-在这种情况下监视新对象。(不要只监视一次对象,然后像你那样在脚本的其余部分使用它)

    所以代码应该是

    while(clickMore == true) {
        List<WebElement> button = driver.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button"));
        if(button.size() > 0) {
            button.get(0).click();
            Thread.sleep(4000);
        }
        else clickMore = false;
    }
    
    WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
    List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
    System.out.println("Total Number of TR: " + list.size());