如何等待表行的文本更改?

时间:2016-07-06 23:00:59

标签: ruby selenium selenium-webdriver

我有以下HTML:

 <tbody>
   <tr>
     <td>
       <span>
          <span> I Will Change </span>
       </span>

我试图找出跨度内的文本何时更改并将新文本存储在变量中。这就是我试过的:

 waitForClick = wait.until {
      newText = ExpectedConditions.invisibilityOfElementWithText(xpath, //path for the span with the text
 }

这会产生语法错误,我不知道如何使用invisibilityOfelementswithText。我怎么能在Ruby中使用它,注意文本更改的最佳方法是什么?我不知道文本会改变什么,所以我不能等待。

2 个答案:

答案 0 :(得分:0)

我不是ruby开发者,但我认为这个想法需要像:

while(driver.PageSource.Equals("I Will Change"))
{
   sleep(1000)
}

答案 1 :(得分:0)

我认为没有办法使用ExpectedConditions执行此操作。与文本相关的方法都与查找文本无关,而不是等待文本更改。在Java中有FluentWait但我找不到任何对Ruby的引用。 FluentWait允许您编写自定义等待,以便您可以等待当前文本的当前元素返回false,这将指示文本更改。除此之外,你必须自己实现它。我不知道Ruby,但伪代码就像

timeout = 20 // seconds
while (element.text == "I Will Change" and timeElapsed < timeout)
{
    sleep(100)
}

如果您自己实施,请确保将超时添加到上面的代码中。您不希望稍微关闭预期的文本,并且脚本会卡住并且永远不会完成。

对于InvisibilityOfElementWithText()方法,它正在寻找一个不可见或被删除的元素。我不认为这就是你想要的,因为你期望元素能够持久存在,但其中包含的文本会发生变化。