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