2017-05-30 77 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'的情况下从旧状态中恢复。 –