2017-05-30 3 views
0

Javaを使用している場合は、古くなった既存の要素をリフレッシュする方法はありますか?何かのように、私は要素を削除して再追加するAngularアプリを持っています。時にはこれは競合状態に遭い、私に陳腐な状態を与えます。私は物事を遅くするために睡眠を避けたいですが、私は500ミリ秒か何かを試みる何かでうまくいくです。私は見つけました。しかし、私は何かを試してみると、オリジナルのXPathがない場合、失効したSelenium要素をリフレッシュするには

driver.findElement(By.xpath(element.foundBy)) 

しかし、これは動作しません。 xPathが最初に使用されたことがわからない場合、どのように更新すればよいですか?

+0

あなたはWebDriverWaitでExpectedConditionを使用してみました - visibilityOf(WebElement) - https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/ selenium/support/ui/ExpectedConditions.html#visibilityOf-org.openqa.selenium.WebElement- WebDriverWaitコンストラクタでポーリング時間とタイムアウトを設定できます。 – Grasshopper

+0

それはページにありますが、スクロールが必要な場合はどうなりますか?また、要素が古く、前回取得した元のクエリがない場合、要素を更新する方法もあります。 – Jackie

+0

XPATHを文字列に格納して、あなたと一緒に持ち歩いてください。文字列をグローバルレベルで宣言することを意味します。失効する可能性のあるインスタンスを処理する場合は、文字列を使用して新しいWeb要素を作成できます。 –

答えて

0

は、以下のようなものを試してください:

WebElement yourElement = driver.findElement(By.xpath("xpath here")); 

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
      .withTimeout(30, TimeUnit.SECONDS) 
      .pollingEvery(500, TimeUnit.MILLISECONDS); 

wait.until(ExpectedConditions.not(ExpectedConditions.stalenessOf(yourElement))); 
+0

これはあまり役に立ちません。すでに存在している要素を待っているのと同じ、見つかった要素が古くなるのを待っています。現在のSeleniumの実装では、 'findElement'をもう一度呼び出すことなく、古い状態から回復する方法はありません。 –

関連する問題