如何通过Selenium和WebDriverWait等待元素包含特定属性?

时间:2018-07-10 04:28:49

标签: java selenium selenium-webdriver xpath webdriverwait

我有一个硒问题,是否有人可以帮助。我需要进入一个URL页面,该页面上的节点最初处于“已注册”状态,X秒钟后,其状态将动态更改为“就绪”状态。在硒执行过程中,我可以继续下一步,直到其状态变为“就绪”状态。 这是初始代码的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()对象以等待更改。这是我的代码:

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

但是在我的硒运行期间,这段代码永远无法运行,而是立即存在。任何想法可能有什么问题吗?提前致谢。

4 个答案:

答案 0 :(得分:0)

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

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

让我知道这是否无效。

答案 1 :(得分:0)

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

rubyzip

答案 2 :(得分:0)

要等待元素更改为 ready 状态,您需要引入 WebDriverWait ,并且可以使用以下解决方案:

boolean status = new WebDriverWait(driver, 20).until(ExpectedConditions.attributeContains(By.xpath("//div[@class='model-holder']/span[contains(.,'200K')]"), "class", "model-ready"));

答案 3 :(得分:0)

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

类似这样的事情: webElement.waitForAttributeMatchesRegex(attribute, regex);