2

如果有人可以提供帮助,我有一个硒问题。我需要进入一个 URL 页面,该页面上的节点最初处于“已注册”状态,X 秒后,其状态将动态更改为“就绪”状态。直到它的状态变为“就绪”状态,我可能会在 selenium 执行期间继续下一步。这是初始代码的 html 代码,

<div class="icon-holder pull-left" action = "select-device" sn="FX0071234" status = "in_stock">
   <i class = "...">...</i>
   <div class="model-holder">
       <span class="model-registered">200K</span>
   </div>
   <div class="active-holder">...</div>
</div>

这是 X 秒后更新的 html 代码,

<div class="icon-holder pull-left" action = "select-device" sn="FX0071234" status = "discovered">
   <i class = "...">...</i>
   <div class="model-holder">
       <span class="model-ready">200K</span>
   </div>
   <div class="active-holder">...</div>
</div>

我想新建一个 WebDriverWait() Obj 来等待更改发生。这是我的代码:

new WebDriverWait(driver, 50).until(ExpectedConditions.attributeContains(
                By.xpath("//span[@class = 'model-registered' and text() = '200K']"), "class", "model-ready"));

但是在我的 selenium 运行时,这段代码永远不会工作,它会立即存在。有什么想法可能是错的吗?提前致谢。

4

4 回答 4

2

要等待元素变为就绪状态,您需要诱导WebDriverWait,您可以使用以下解决方案:

boolean status = new WebDriverWait(driver, 20).until(ExpectedConditions.attributeContains(By.xpath("//div[@class='model-holder']/span[contains(.,'200K')]"), "class", "model-ready"));
于 2018-07-10T07:48:10.083 回答
1

您可以直接等待具有“模型就绪”类的元素存在。这是代码:

new WebDriverWait(driver, 50).until(ExpectedConditions.ElementExists(
            By.xpath("//span[@class = 'model-ready' and text() = '200K']")));

如果这不起作用,请告诉我。

于 2018-07-10T04:55:10.463 回答
0

使用 FluentWait 等待状态更改为“就绪”。

 Wait<WebDriver> wait = new FluentWait<WebDriver>(webDriver)
.withTimeout(30, TimeUnit.SECONDS) // set the timeout
.pollingEvery(2, TimeUnit.SECONDS); // set the interval. Checks every 2sec's for the element status 'ready'

WebElement foo = wait.until(new Function() { 
public WebElement apply(WebDriver driver) { 
return driver.findElement(By.xpath("//span[@class = 'model-ready' and text() = '200K']")); 
} 
});
于 2018-07-10T07:01:46.847 回答
0

您还可以使用该方法waitForAttributeMatchesRegex等待目标属性,直到它与某些特定模式匹配。

像这样的东西: webElement.waitForAttributeMatchesRegex(attribute, regex);

于 2020-02-24T19:33:47.607 回答