3

私を夢中にさせているこのことについて助けが必要です。ブラウザの URL と無限ループをチェックし、ループと別のループの間で少し (Thread.Sleep) 待機して、CPU が過負荷にならないようにしたいと考えています。次に、ブラウザーの URL が必要な場合は、ページが完全に読み込まれる前に Javascript を介して要素を追加/変更/削除したいと考えています。そうしないと、これを使用する人が変更を見ることができます。(JavaScript部分のヘルプは必要ありません)しかし、問題があります.Selenium Webdriverでは、(.get()、.navigate().to()を使用して、またはクライアントから直接ページに移動すると、 ) ページがロードされるまで、実行は強制的に停止されます。「偽の」タイムアウトを設定しようとしましたが、(少なくとも Chrome では) TimeoutException をキャッチすると、ページの読み込みが停止します。Firefox には不安定な読み込みのオプションがあることは知っていますが、私は知りません。

public static void main(String[] args) throws InterruptedException {        
    System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS); // Fake timeout
    while (true) {
        try {
            // If the url (driver.getCurrentUrl()) is what I want, then execute javascript without needing that page is fully loaded
            // ...
            // ...               
        }
        catch (TimeoutException e) {
             // It ignores the Exception, but unfortunately the page stops loading.
        }
        Thread.sleep(500); // Then wait some time to not overload the cpu
    }
}

これは Chrome で行う必要があり、可能であれば Firefox と Internet Explorer で行う必要があります。私はJavaでプログラミングしています。前もって感謝します。

4

2 に答える 2

0

ご存知のように、ユーザーが driver.get("url"); を試した場合、セレンはページが読み込まれるまで待機します (それほど長くない場合があります)。そのため、合計読み込み時間を待たずに URL への移動で何かをしたい場合は、取得または移動の代わりに以下のコードを使用します

    JavascriptExecutor js=(JavascriptExecutor)driver;
    js.executeScript("window.open('http://seleniumtrainer.com/components/buttons/','_self');");

この後使用

driver.findElement(By.id("button1")).click();

ボタンをクリックしても、そのような要素の例外が発生しないため、ページの読み込みを待っていないことを期待しています。そのため、ページの読み込みが非常に速く、クリックが正常に機能します。

これが、起動時に問題を解決するのに役立つことを願っています。for loop ソリューションが既に提供されていることを願っています。

ありがとう

于 2015-12-31T10:13:12.307 に答える
0

Selenium は、Web ページがブラウザーに読み込まれると停止するように設計されているため、実行を続行できます。

あなたの場合、2つのオプションがあります:

1) ブラウザの URL が任意の時点で自動的に (ajax) 変更される場合は、条件が満たされるまでブラウザの URL を取得し続けます。

while(currentURL.equals("Your Condition")){
  currentURL = driver.getCurrentUrl();
  Thread.sleep(2000);
}

2) ブラウザを更新する必要がある場合は、目的の URL を取得するまでループで更新メソッドを使用します。

while(currentURL.equals("Your Condition")){
    driver.navigate().refresh();
    currentURL = 
    Thread.sleep(2000);
}
于 2015-12-31T01:41:46.747 に答える