Javaを使用したSelenium Webdriver:要素がキャッシュに見つかりません-おそらくページが検索されてから変更されています

JK:

私はクラスの最初に変数を初期化しています:

public WebElement logout;

後でコードの一部のメソッドで、ログアウトボタンに初めて遭遇したときに、値をその変数に割り当てます(if / elseステートメントの括弧内):

logout = driver.findElement(By.linkText("Logout"));
logout.click();

次に、テストの別の段階でもう一度「ログアウト」を正常に使用します。

logout.click();

そして、テストの最後に、要素が同じ場所(By.linkText( "Logout"))で、次のエラーが発生します。

Element not found in the cache - perhaps the page has changed since it was looked up

どうして?

編集:実際には、私はlogout.click();を正常に使用していません。私のテストの別の段階でカンマン。もう使えないようです。logout1 webelementを作成して使用する必要があります...

Mark Rowlands:

最初に見つけた後でページに変更があった場合elementwebdriver参照には参照が含まれるようになりstaleます。ページが変更されたので、elementwebdriver予期した場所でなくなります。

問題を解決findするには、要素を使用する必要があるたびに要素を試してみてください-いつでも呼び出すことができる小さなメソッドを書くのが得策です。

import org.openqa.selenium.support.ui.WebDriverWait

public void clickAnElementByLinkText(String linkText) {
    wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText(linkText)));
    driver.findElement(By.linkText(linkText)).click();
}

次に、コード内で必要なことは次のとおりです。

clickAnElementByLinkText("Logout");

そのため、要素を見つけてクリックするたびに、その要素への参照が「更新」されてページが変更されたとしても、すべて正常にクリックされます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ