2017-05-05 1 views
-1

ボタンが付いたテーブルがあります。表の各行は3つのボタンで構成されています。私はこれらの3つのうちの1つをクリックしてから、他のページに移動して変更を確認する必要があります。私は変更が良いことを主張した後、私はそれらのボタンに戻り、それらを初期状態に設定したいと思う。したがって、リストにはこれらのボタンの初期状態が格納されます。しかし、私は他のページに移動して変更を確認し、それらのボタンを初期状態に戻すために戻る。私はStaleElementReferenceExceptionを取得します。私は理由があるが、たとえ要素を再び初期化しても同じエラーが出る。私はページオブジェクトのパターンを使用して、その方法で要素を初期化しますPageFactory.initElements(new ElementDecorator(Driver.getInstance()), this); Thread.sleepを入れて要素のスチールを初期化しても、エラーが発生します。Selenium StaleElementReferenceException。どうすればいいですか?

+0

の可能性のある重複(http://stackoverflow.com/questions/12967541/how-to-avoid [セレンで「StaleElementReferenceException」を回避する方法?] -staleelementreference-in-selenium) – JeffC

+0

[尋ねる]と[どの程度の研究努力が必要ですか?](https://meta.stackoverflow.com/questions/2)をお読みください。 61592/how-much-research-effort-of-stack-overflow-users)試したコードとエラーメッセージなどの実行結果を提供してください。関連するHTML – JeffC

答えて

0

要素が見つかった場合はbooleanのelementPresentを返し、何らかの理由で要素が見つからない場合はfalseを返します(またはxpathが十分でない可能性があります)。タイムアウトを使用すると、要素が(すなわち5秒間待ってから、要素がスローされますが見つからない例外)も

public boolean waitForElement(String elementXpath, int timeOut) { 

    try{      
    WebDriverWait wait = new WebDriverWait(driver, timeOut); 
    boolean elementPresent=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(elementXpath)).isDisplayed()); 

    System.out.printf("%nElement is present [T/F]..? ")+elementPresent; 
    }   
    catch(TimeoutException e1){e1.printStackTrace();elementPresent=false;}   

    return elementPresent; 
} 

あなたのテーブルに戻って別の勧告が存在しないことを言うことができる前に待機する時間である可能性任意の要素を見つけるためにしようとする前に、ページを更新すること:

driver.navigate().refresh(); 
関連する問題