确认页面是否已加载

时间:2015-04-28 08:40:53

标签: java selenium

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

3 个答案:

答案 0 :(得分:0)

我使用以下内容,它相当自我解释。

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

答案 1 :(得分:0)

您可以设置隐式等待,等待元素在15秒内找到它们

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

或明确地:

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

答案 2 :(得分:0)

根据您提供的信息,我假设您已点击该链接,并在新标签页中打开该页面,然后您就会获得此类例外情况。

在这种情况下,您需要使用窗口句柄切换到新选项卡并使用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)));