Java 确认页面是否已加载

Java 确认页面是否已加载,java,selenium,Java,Selenium,我有一个页面中的超链接列表,当我单击链接时,它们将重定向到新选项卡。如何确定页面是否已加载。我使用了do-while循环来确定元素是否被启用。但是我没有得到这样的元素。你能帮个忙吗。。下面是一段代码。我也尝试过显式等待。但同样的问题 WebElement element7 = driver.findElement(By.id("MenuControlBNY_MenuNavBar_MenuControlBNY_MenuNavBar_p11__Tree_item_2_cell"));

我有一个页面中的超链接列表,当我单击链接时,它们将重定向到新选项卡。如何确定页面是否已加载。我使用了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);

我使用下面的方法,这是不言自明的

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。因此,您可以在搜索元素之前调用上述方法。

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

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
或者明确地说:

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

根据您提供的信息,我假设您已经单击了链接,页面在一个新选项卡中打开,然后您将得到这样的异常

在这种情况下,您需要使用窗口句柄切换到新选项卡,并使用explict wait for元素

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)));

一位同事建议需要使用事件列表器函数。请提出建议并帮助解决这个问题我愿意对此进行更正,但我不相信有任何内置方法专门等待页面加载。类的第59行。方法将阻塞,直到加载实际完成,并读取更多内容,类第38行声明它很可能不会。使用WebElementclick方法粘贴上述方法时,出现两个错误。在until行中显示错误消息,并且脚本中未初始化js变量