使用 Selenium 和 Java 创建循环以在执行时重新加载页面
Create a loop to reload page while execution using Selenium and Java
我有一个页面,在某些时候,它不会在 selenium 中加载。如果我在打开 selenium 的页面上单击 'Reload' 按钮,有时会加载页面。此页面是遗留系统,我们无法更改它。
然后我需要创建一个条件,像这样:
如果Id:xxx可见
- 连续执行
如果没有:
- driver.navigate().refresh();
我正在使用 Selenium Java。
我建议实施自定义 ExpectedCondition
,例如:
import org.openqa.selenium.support.ui.ExpectedCondition
public static ExpectedCondition<Boolean> elementToBeVisibleWithRefreshPage(By element, int waitAfterPageRefreshSec) {
return new ExpectedCondition<Boolean>() {
private boolean isLoaded = false;
@Override
public Boolean apply(WebDriver driver) {
List elements = driver.findElements(element);
if(!elements.isEmpty()) {
isLoaded = elements.get(0).isDisplayed();
}
if(!isLoaded) {
driver.navigate().refresh();
// some sleep after page refresh
Thread.sleep(waitAfterPageRefreshSec * 1000);
}
return isLoaded;
}
};
}
用法:
By element = By.id("xxx");
new WebDriverWait(driver, Duration.ofSeconds(30)).until(elementToBeVisibleWithRefreshPage(element, 10));
这将等待 30 秒,直到元素可见,如果元素不可见,将刷新页面并暂停 10 秒。
潜在的 sleep 可能会被其他 WebDriver wait 代替,但这也应该有效。
最简单的方法是将代码块包装在 try-catch{}
块中以连续执行,如下所示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
try
{
WebElement element = new WebDriverWait(driver, Duration.ofSeconds(20)).until(ExpectedConditions.visibilityOfElementLocated(By.id("elementID")));
// other lines of code of continius execution
}
catch(TimeoutException e)
{
driver.navigate().refresh();
}
我有一个页面,在某些时候,它不会在 selenium 中加载。如果我在打开 selenium 的页面上单击 'Reload' 按钮,有时会加载页面。此页面是遗留系统,我们无法更改它。
然后我需要创建一个条件,像这样:
如果Id:xxx可见
- 连续执行
如果没有:
- driver.navigate().refresh();
我正在使用 Selenium Java。
我建议实施自定义 ExpectedCondition
,例如:
import org.openqa.selenium.support.ui.ExpectedCondition
public static ExpectedCondition<Boolean> elementToBeVisibleWithRefreshPage(By element, int waitAfterPageRefreshSec) {
return new ExpectedCondition<Boolean>() {
private boolean isLoaded = false;
@Override
public Boolean apply(WebDriver driver) {
List elements = driver.findElements(element);
if(!elements.isEmpty()) {
isLoaded = elements.get(0).isDisplayed();
}
if(!isLoaded) {
driver.navigate().refresh();
// some sleep after page refresh
Thread.sleep(waitAfterPageRefreshSec * 1000);
}
return isLoaded;
}
};
}
用法:
By element = By.id("xxx");
new WebDriverWait(driver, Duration.ofSeconds(30)).until(elementToBeVisibleWithRefreshPage(element, 10));
这将等待 30 秒,直到元素可见,如果元素不可见,将刷新页面并暂停 10 秒。
潜在的 sleep 可能会被其他 WebDriver wait 代替,但这也应该有效。
最简单的方法是将代码块包装在 try-catch{}
块中以连续执行,如下所示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
try
{
WebElement element = new WebDriverWait(driver, Duration.ofSeconds(20)).until(ExpectedConditions.visibilityOfElementLocated(By.id("elementID")));
// other lines of code of continius execution
}
catch(TimeoutException e)
{
driver.navigate().refresh();
}