6

私はWebAppのテストにChromeブラウザを使用しています。Chromeドライバのページ読み込み戦略

非常に長い時間が経過してページが読み込まれることがあります。私はダウンロードを止めるか、ダウンロード時間を制限する必要がありました。

FireFoxで私は約PAGE_LOAD_STRATEGY = "eager"を知っています。

クロムには何か類似点はありますか?

P.S .: driver.manage().timeouts().pageLoadTimeout()が動作しますが、その後、Webdriverの処理はTimeOutExceptionをスローします。 ページの現在のURLを取得する必要があります。

答えて

4

の上使用して解決することを願っています:

そのコマンドについて

それだけでなく、このコードを試してみてください役立つ

かもしれません新しい文書をロードさせると、コマンドが返すポイントは、というセッションのページローディング方針によって決定されます。

Page Loadingがあまりにも多くの時間がかかるし、あなたがwebdriverpageLoadStrategyを変更することができ、追加のサブリソース(画像、CSS、JSなど)をダウンロードを中止する必要があります。これを書いているよう

pageLoadStrategyは次の値をサポートします

  1. normal

    このstategyをダウンロードし、解析された全ページの読み込み(HTMLコンテンツとサブリソースを待つセレンを引き起こし)。

  2. eager

    このstategyは(HTMLコンテンツがダウンロードされ、解析されたのみ)DOMContentLoadedイベントを待機するセレンの原因となります。

  3. none

    この戦略は、セレンが完全に受信された最初のページコンテンツ(ダウンロードされたHTMLコンテンツ)の直後に返すようになります。デフォルトでは

Seleniumがページをロードするとき、それはnormalpageLoadStrategyに従います。ここ


pageLoadStrategyを構成するコードブロックである:

ChromeOptions options = new ChromeOptions(); 
    DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
    capabilities.setCapability(ChromeOptions.CAPABILITY, options); 
    capabilities.setCapability("pageLoadStrategy", "none"); 
    WebDriver driver = new ChromeDriver(capabilities); 
    driver.navigate().to("http://www.longer_pageload_url.com"); 

参照:

+0

はい!それはわたしを助ける。しかし、なぜ.....? どのように動作しますか? なぜpageLoadStrategy = noneに設定する必要がありますか? なぜpageLoadStrategy = eagerが機能しないのですか? – PanamaBoy

+1

@DebanjanBあなたの答えは、 'pageLoadStrategy'の変更がその動作にどのように影響を与えるのかを説明していないので、フォローアップの質問は予想以上のものであり、それに答えるのは簡単ではありません。ありがとう – BVengerov

0

明示的に待機してみてください。 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); 
} 

を私はあなたの問題はwebdriverをスペックからコード

+0

回答ありがとうございます...しかし、それは私のために働いていません... 私はwait.until(ExpectedConditions.urlToBe( "http://myurl.com"))を追加しました。 しかし、セレンはまだdocument.readyState == "完了"まで待っています – PanamaBoy

+0

私は自分の答えを編集しました。私はあなたの問題に似たstackoverflowの1つのポストを参照しました –

関連する問題