我正在使用 Chrome 浏览器来测试 WebApp。
有时页面会在很长一段时间后加载。我需要停止下载或限制他们的下载时间。
在 Firefox 中,我知道PAGE_LOAD_STRATEGY = "eager"
.
chrome有类似的东西吗?
PS:driver.manage().timeouts().pageLoadTimeout()
有效,但之后对 Webdriver 的任何处理都会抛出TimeOutException
. 我需要在停止启动后获取页面的当前 url。
我正在使用 Chrome 浏览器来测试 WebApp。
有时页面会在很长一段时间后加载。我需要停止下载或限制他们的下载时间。
在 Firefox 中,我知道PAGE_LOAD_STRATEGY = "eager"
.
chrome有类似的东西吗?
PS:driver.manage().timeouts().pageLoadTimeout()
有效,但之后对 Webdriver 的任何处理都会抛出TimeOutException
. 我需要在停止启动后获取页面的当前 url。
ChromeDriver 77.0(支持 Chrome 版本 77)现在eager
支持pageLoadStrategy。
已解决的问题 1902:支持急切页面加载策略 [Pri-2]
从 Webdriver 规范:
对于导致加载新文档的命令,命令返回的点由会话的页面加载策略决定。
当Page Loading
花费太多时间并且您需要停止下载其他子资源(图像、css、js 等)时,您可以 pageLoadStrategy
通过webdriver
.
在撰写本文时,pageLoadStrategy
支持以下值:
normal
这种策略导致 Selenium 等待整个页面加载(下载和解析 html 内容和子资源)。
eager
这种策略导致 Selenium 等待 DOMContentLoaded 事件(仅下载和解析 html 内容)。
none
此策略导致 Selenium 在完全接收到初始页面内容(已下载 html 内容)后立即返回。
默认情况下,当Selenium
加载页面时,它遵循.normal
pageLoadStrategy
这是通过DesiredCapabilities类和ChromeOptionspageLoadStrategy()
类的实例进行配置的代码块,如下所示:
使用DesiredCapabilities类:
package demo; //replace by your own package name
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
public class A_Chrome_DCap_Options {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
DesiredCapabilities dcap = new DesiredCapabilities();
dcap.setCapability("pageLoadStrategy", "normal");
ChromeOptions opt = new ChromeOptions();
opt.merge(dcap);
WebDriver driver = new ChromeDriver(opt);
driver.get("https://www.google.com/");
System.out.println(driver.getTitle());
driver.quit();
}
}
使用ChromeOptions类:
package demo; //replace by your own package name
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class A_Chrome_Options_test {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions opt = new ChromeOptions();
opt.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(opt);
driver.get("https://www.google.com/");
System.out.println(driver.getTitle());
driver.quit();
}
}
注意:
pageLoadStrategy
valuesnormal
和是WebDriver W3C Editor's Drafteager
的要求,但value as仍然是ChromeDriver实现中的WIP(正在进行的工作) 。您可以在 Python 中 Chromedriver Selenium 的“Eager”页面加载策略解决方法中找到详细讨论none
pageLoadStrategy
eager
参考:
在 C# 中,由于 PageLoadStrategy.Eager 似乎不适用于 Chrome,我只是用 WebDriverWait 自己编写了它。将 PageLoadStrategy 设置为 none,然后这样做基本上会覆盖它:
new WebDriverWait(_driver, TimeSpan.FromSeconds(20))
.Until(d =>
{
var result = ((IJavaScriptExecutor) d).ExecuteScript("return document.readyState");
return result.Equals("interactive") || result.Equals("complete");
});
您只需添加 chrome 驱动程序作为参数,在我的情况下 TimeSpan 设置为最大 20 秒。因此,页面交互或完成最多会等待 20 秒
尝试使用显式等待。访问此链接。这可能会有所帮助
也试试这个代码:
WebDriver driver = new FirefoxDriver();
String startURL = //a starting url;
String currentURL = null;
WebDriverWait wait = new WebDriverWait(driver, 10);
foo(driver,startURL);
/* go to next page */
if(driver.findElement(By.xpath("//*[@id='someID']")).isDisplayed()){
String previousURL = driver.getCurrentUrl();
driver.findElement(By.xpath("//*[@id='someID']")).click();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
ExpectedCondition e = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return (d.getCurrentUrl() != previousURL);
}
};
wait.until(e);
currentURL = driver.getCurrentUrl();
System.out.println(currentURL);
}
我希望您的问题将使用上面的代码解决