2017-05-30 75 views
0

有沒有辦法(如果使用Java)刷新已經陳舊的現有元素。就像我有一個Angular應用程序,它可以刪除並重新添加一個元素。有時候這會導致競爭狀態,並使我處於一種陳舊的狀態。我想避免睡眠讓事情減慢,但是,我對每500毫秒或更長時間嘗試的事情都很滿意。我看到foundBy,但當我嘗試類似如果我沒有原始XPath,如何刷新陳舊的Selenium元素

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

但這不起作用。如果我不確定最初使用什麼xPath,我該如何刷新?

+0

您是否嘗試過使用ExpectedCondition與WebDriverWait - 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存儲在一個字符串中,隨身攜帶。我的意思是在全球範圍內宣佈字符串。如果您處理可能導致陳舊的實例,我們可能會使用該字符串來構建新的webelement。 –

回答

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'的情況下從舊狀態中恢復。 –