如果元素没有出现在Selenium网络驱动程序 java 中,如何重新加载页面



有时由于超时或其他原因,页面停止加载或被加载,但注册页面没有出现,为了确保它出现,我们必须刷新页面,我尝试了driver.navigation.refresh((,我尝试过显式等待和javascript执行器,但都不起作用,我正在添加我尝试过的片段,但也不起作用。一旦findelement((.显示为false,我的脚本就会失败,它不会进入if循环。以下是代码-

for(int i=0;i<3;i++)
{   
System.out.println("In for loop");
try
{
if(driver.findElement(byusername).isDisplayed())
{
System.out.println("Element found");
driver.findElement(byusername).sendKeys(username);
driver.findElement(bypassword).sendKeys(password);
driver.findElement(signIn).click();
System.out.println("Logged in");
basewait.until( ExpectedConditions.presenceOfElementLocated(Tab));
System.out.println("Wait completed, going to base class");
i=3;
}
else
{
System.out.println("Element not found"+i+" try");
driver.navigate().refresh();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
i++;
}
}
catch(NoSuchElementException e)
{
System.out.println(e);
}

尝试替换:

if(driver.findElement(byusername).isDisplayed())

带有:

if(driver.findElements(byusername).size() > 0 && driver.findElements(byusername).get(0).isDisplayed())

这不会引发异常,您可以转到else语句。driver.findElements(byusername)返回找到的元素列表,如果没有找到任何元素,则只返回一个空列表。

首先,请注意,在实例化web驱动程序之后,只需要设置一次隐式等待,除非出于任何原因,您希望稍后更改该设置的超时值。

第二,尝试使用以下代码等待页面完成加载。

/**
* Wait for the web page to finish loading
*/
public void waitForPageToLoad() {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver wdriver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
}
});
}

最新更新