0

私の質問は簡単です-Seleniumを使用して、各ハイパーリンクが新しいページまたは新しいウィンドウで開いたり、同じWebページで開いたりするときに、どうすればリンクをクリックし続けることができますか.

たとえば、Web ページに次のリンクがあります。 ログイン サインアップ パスワードをお忘れですか? 私たちと一緒にサインアップするには、このリンクに従ってください ホーム 利用規約 プライバシー ポリシー

これは、Webページでこれらのリンクをクリックするために私が書いたコードの小さなスニペットです。

List<WebElement> elements = driver.findElements(By.tagName("a"));
        //clicking all links
        for (WebElement el : elements){
            System.out.println("Link getting clicked"  + el.getText());
            el.click();
            driver.navigate().back();
        }

ご覧のとおり、リンクを取得して 1 つずつクリックしようとしています。ただし、最初のクリック自体の後にエラーが発生します。コンソールには、「org.openqa.selenium.StaleElementReferenceException: 要素が DOM に接続されていません」と表示されます。

リンクが同じ Web ページで開かれているため、原因はわかっていると確信していますが、戻るナビゲーションを行っているため、まったく役に立ちません。

ご意見/ご提案はありますか?

4

2 に答える 2

0

これは、プログラムの実行が「driver.navigate().back();」の呼び出しに進んでいることが原因である可能性があります。ページが読み込まれる前。

暗黙の waitを導入してみてください。これは、「要素がすぐに利用できない場合に、要素を見つけようとするときに、WebDriver に一定時間 DOM をポーリングする」ように指示します。

たとえば、Web ドライバーを作成するときは、次のことを試してください。

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
于 2013-10-04T23:49:29.113 に答える
0

ページがリロードされるたびに、要素を操作する前に要素を再検索する必要があります。コードについては、次のように変更してみてください。

    driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);
    List<WebElement> elements = driver.findElements(By.tagName("a"));
    //clicking all links
    for (int i=0; i<elements.size(); i++){
        WebElement el = driver.findElements(By.tagName("a")).get(i);            
        System.out.println("Link getting clicked"  + el.getText());
        el.click();
        driver.navigate().back();
    }
于 2015-04-30T14:45:41.247 に答える