WebAppのテストにChromeブラウザーを使用しています。
非常に長い時間後にページがロードされる場合があります。ダウンロードを停止するか、ダウンロード時間を制限する必要がありました。
FireFoxでは、_PAGE_LOAD_STRATEGY = "eager"
_について知っています。
クロムに似たものはありますか?
追伸:driver.manage().timeouts().pageLoadTimeout()
は機能しますが、その後、Webdriverに対する処理はTimeOutException
をスローします。起動を停止した後、ページの現在のURLを取得する必要があります。
ChromeDriver 77.0(Chromeバージョン77)をサポート)はeager
aspageLoadStrategy。
解決した問題1902:積極的なページ読み込み戦略のサポート[Pri-2]
Webdriver仕様から:
新しいドキュメントをロードするコマンドの場合、コマンドが戻るポイントは、セッションのページロード戦略によって決定されます 。
_Page Loading
_に時間がかかりすぎて、追加のサブリソース(イメージ、CSS、JSなど)のダウンロードを停止する必要がある場合、pageLoadStrategy
webdriver
を介して。
この記事の執筆時点では、pageLoadStrategy
は次の値をサポートしています。
normal
この状態により、Seleniumはページ全体のロード(htmlコンテンツとサブリソースのダウンロードと解析)を待機します。
eager
この状態により、SeleniumはDOMContentLoadedイベント(htmlコンテンツのダウンロードと解析のみ)を待機します。
none
この戦略により、Seleniumは最初のページコンテンツが完全に受信された(htmlコンテンツがダウンロードされた)直後に戻ります。
デフォルトでは、Selenium
がページをロードすると、normal
に従います。 pageLoadStrategy
。
構成するコードブロックは次のとおりです pageLoadStrategy()
の両方のインスタンスを通じてDesiredCapabilitiesクラスおよびChromeOptionsクラスは次のとおりです::
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
値normal
、eager
およびnone
は WebDriver W3C EditorのDraft ですが、pageLoadStrategy
値はeager
はまだWIP(Work In Progress)内ChromeDriver 実装。詳細な議論は PythonでのChromedriver Seleniumの「熱心な」ページ読み込み戦略の回避策 にあります。
参照:
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秒待機するか、コンプリート
明示的な待機を使用してみてください。 this リンクにアクセスします。役に立つかもしれません
このコードも試してください:
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);
}
上記のコードを使用して問題が解決されることを願っています