私はクラスの最初に変数を初期化しています:
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を作成して使用する必要があります...
最初に見つけた後でページに変更があった場合element
、webdriver
参照には参照が含まれるようになりstale
ます。ページが変更されたので、element
はwebdriver
予期した場所ではなくなります。
問題を解決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]
コメントを追加