16

クラスの最初で変数を初期化しています。

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 Web要素を作成して使用する必要があります...

4

3 に答える 3

0

ブラウザーは動的ページの DOM 構造を再構築するため、要素を保持する必要はありません。使用する前に見つける必要があります。

たとえば、XPath を使用します。このアプローチは正しくありません (org.openqa.selenium.StaleElementReferenceException将来的に例外が発生する可能性があります):

WebElement element = driver.findElement(By.xpath("//ul[@class=\"pagination\"]/li[3]/a"));
...// Some Ajax interaction here
element.click(); //<-- Element might not be exists

このアプローチは正しいです:

driver.findElement(By.xpath("//ul[@class=\"pagination\"]/li[3]/a")).click();
于 2016-07-06T14:06:05.837 に答える