0

問題- ボタン、テキストボックス、タブなどの一部の Web 要素が認識されることがありますが、突然認識されなくなります。

org.openqa.selenium.StaleElementReferenceException: 要素がキャッシュに見つかりません - おそらくページが検索されてから変更されました コマンドの実行時間またはタイムアウト: 33.03 秒

ボタンをクリックするためのコード:

Actions actions1 = new Actions(driver);
System.out.println("boolean value of Confirm order is"+driver.findElement(By.id("confirmOrder")).isDisplayed()); ---> Returning True always
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='confirmOrder']")));
System.out.println("Is the Generate order button visible-"+element.isDisplayed());       System.out.println("Is the Generate order button enabled-"+element.isEnabled());
actions1.moveToElement(element);
actions1.click();
actions1.perform();

ボタンisDisplayed()は常に true を返しますが、3 回に 1 回クリックされます。これは、タブやテキスト ボックスなど、他のすべての要素で発生します。Firefox 24 の使用 (コードは v25 で最悪の動作をします)

何がうまくいかないのか、要素が認識されるのはなぜでしょうか?

4

2 に答える 2

1

StaleElementReferenceException要素を指していたが、変更されたことを意味します(類似/同一の要素に置き換えられたか、すべて一緒に削除されました)。

ページで常にアクティブな JQuery が実行されている場合、最善を尽くすことを祈る以外にできることはあまりありません。

ただし、JQuery を使用してページをロードするだけの場合 (まだ完了していない場合)、JQuery が完了すると、次のように true が返されます。

(Boolean)((JavascriptExecutor)driver).executeScript("return jQuery.active == 0");

(上記の構文は正しいと思います。コードを抽象化したので、すべてのコマンドが正しくない可能性があります)

于 2013-11-03T04:00:18.983 に答える
0

特定のボタンタブ、またはリンクのクリックを実行する前に、予期される条件を使用してコントロール を渡すことができます

         WebDriverWait wait = new WebDriverWait(driver, 18);
         wait.until(ExpectedConditions.elementToBeClickable(By.id("confirmOrder")));
         WebElement element = driver.findElement(By.id("confirmOrder"));
            element.sendKeys(org.openqa.selenium.Keys.CONTROL);
            element.click();

または、 wait.until(ExpectedConditions.presenceOfElementLocated(By.id("confirmOrder")));で試すことができます 。

于 2013-11-06T06:28:26.843 に答える