2016-07-06 17 views
1

我的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中使用它,以及注意文本变化的最佳方式是什么?我不知道是什么文字将变为所以我不能有一个wait.until要么

+0

你预计会发生什么? SPAN元素不再可见,或要更改的文本或文本消失或? – JeffC

+0

@JeffC改变范围内的文字 –

+0

请重新阅读您的问题并清理文字,以便说明您的意图。你缺少标点符号和单词。语法对于我们制作在线参考书非常重要,因此您的努力和帮助很有用。阅读“[问]”,尤其是链接的页面,将有助于你理解该网站。 –

回答

0

我不是Ruby开发者,但我认为这个想法必须是这样的:

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

PageSource?这不是很具体,轮询之间的时间有点长。 – JeffC

+0

你可以通过driver.FindElement(By.xpath(“// span [contains(text(),'I Will Change')]”)。Count> 0)来使它更具特色,直到元素存在为止循环中 –

0

我不认为有一种方法可以使用ExpectedConditions来做到这一点。与文本相关的方法都与找到不等待文本改变的文本有关。在Java中有FluentWait,但我找不到任何有关Ruby的参考。 FluentWait允许您编写自定义等待,以便您可以等待当前元素与当前文本返回false,这将表示文本更改。除此之外,你必须自己实现它。我不知道Ruby,但伪代码会像

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

确保您的超时,如果你自己实现它添加到上面的代码。你不希望预期的文字稍微偏离,脚本卡住,永远不会结束。

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