确认页面是否已加载

mctunoxg  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(200)

我有一个网页的超链接列表,当我点击链接,他们重定向到新的标签。如何确定页面是否已加载。我使用do while循环来确定元素是否启用。但我得到的只是“没有这样的元素”。你能帮个忙吗。。下面是一段代码。我也尝试过明确的等待。但同样的问题。

WebElement element7 = driver.findElement(By.id("MenuControlBNY_MenuNavBar_MenuControlBNY_MenuNavBar_p11__Tree_item_2_cell"));
    if (element7.isEnabled())
    {
        element7.click();
        System.out.println(" Report is selected");
    }

    boolean element8 = false;
    int count = 0 ;
    do
    {
        element8 = driver.findElement(By.id("working")).isEnabled();
        System.out.println("Report is loaded");
        count = count+1;
        if(count == 1000)
        {
            break;
        }
    }while(element8 == true);
sc4hvdpw

sc4hvdpw1#

我使用下面的,它相当不言自明。

private static WebDriverWait wait = new WebDriverWait(driver, 60);
private static JavascriptExecutor js  = (JavascriptExecutor) driver;

public static void waitForPageLoaded() {
            wait.until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    Boolean res = (js.executeScript("return document.readyState").equals("complete"));
                    System.out.println("[DEBUG] waitForPageLoaded: " + res);
                    return res;
            }
    });
}

编辑:当页面处于就绪状态(即页面已加载)时,将返回true。因此,您可以在搜索元素之前调用上述方法。

1l5u6lss

1l5u6lss2#

您可以设置一个隐式等待,它将在查找元素时等待15秒

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

或者明确地说:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("working")));
yeotifhr

yeotifhr3#

从你提供的信息来看,我假设你点击了链接,页面在一个新的选项卡中打开,然后你会得到这样的异常。
在这种情况下,您需要使用窗口句柄切换到新选项卡,并使用explict wait for element

String parentWindow= driver().getWindowHandle();
element7.click();
Set<String> myset = driver().getWindowHandles();
myset.remove(parentWindow);
driver().switchTo().window((String)myset.toArray()[0]);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(locator)));

相关问题