【问题标题】:Retrieve <TD> text using WATIR使用 WATIR 检索 <TD> 文本
【发布时间】:2011-11-21 11:25:57
【问题描述】:

我正在使用 WATIR 进行自动化测试,我需要将速率值复制到一个变量中。在下面的示例中(来自网页源代码),我需要该变量myrate 具有值2.595。我知道如何从&lt;input&gt;&lt;span&gt;(见下文)中检索值,但不能直接从&lt;td&gt; 中检索值。有什么帮助吗?谢谢

<TABLE>
<TR>
    <TD></TD>
    <TD>Rate</TD>
    <TD>2.595</TD>
</TR>
</TABLE>

对于&lt;span&gt;,我使用以下代码:

raRetrieved = browser.span(:name => 'myForm.raNumber').text

【问题讨论】:

  • 从您的页面发布实际的示例 HTML,而不是一般的内容,这往往会为您提供更好的答案,因为我们可以更好地了解您面临的实际挑战。

标签: html ruby watir watir-webdriver automated-tests


【解决方案1】:

试试这个,使用正则表达式找到您想要的行以匹配包含单词“Rate”的行,然后获取该行中第三个单元格的文本。

myrate = browser.tr(:text, /Rate/).td(:index => 2).text
 #or you can use the more user-friendly aliases for those tags
myrate = browser.row(:text, /Rate/).cell(:index => 2).text

如果单词“Rate”可能出现在该表的其他文本中,但始终只是您想要的行的第二个单元格中的唯一条目,则找到具有该确切文本的单元格,使用父方法定位保存该单元格的行,然后从第三个单元格中获取文本。

myrate = browser.cell(:text, 'Rate').parent.cell(:index => 2).text

.cell & .row.td & .tr 的使用取决于你,有些人喜欢标签,有些人喜欢更具描述性的名称。使用任何你认为使代码对你或其他将使用它的人来说最易读的东西。

注意:上面的代码假定使用 Watir-Webdriver 或 Watir 2.x,它们都使用从零开始的索引。对于旧版本的 Watir,将索引值更改为 3

为了记录,我完全同意其他人的 cmets 关于您发布的代码示例缺乏可测试性的观点。太可怕了。要求一些东西来定位正确的元素,例如 ID 值或名称,这在使页面更易于测试方面并不过分。

【讨论】:

    【解决方案2】:

    试试这个:

    browser.td(how, what).text
    

    这里的问题是tabletrtd标签没有任何属性。您可以尝试这样的事情(未测试):

    browser.table[0][2].text
    

    【讨论】:

    • 谢谢!问题是表更大可能会经常更改,包括行的顺序。是否有可能以某种方式获取“Rate” 的索引(此文本永远不会更改),然后请求下一个 的文本(2.595)并将其存储在变量中?
    • @Arturo 你可能有更高层次的问题;与开发人员交谈,或与您的老板交谈或与您的客户交谈(或者如果您独自一人,请与自己交谈)关于使前端更具可测试性,并检查您对脆弱的自动化脚本的投资。对于一个体面的项目,在一两个月内,你将陷入代码维护的地狱。您可以使用 browser.span(:text=>'Rate', :index=>X) 找到它,然后使用 .parent 作为行,然后使用该行的索引(除非它也发生了变化)。哦,或者使用正则表达式将其从行文本中解析出来。无论如何,一些想法。
    • @kinofrost 同意这两个方面。我不久前发布的答案涵盖了其中一些想法(通过文本查找的正则表达式,如果最简单的方法是找到具有特定文本的单元格,则使用父方法。)
    【解决方案3】:

    如果这对遇到相同问题的任何人有帮助,那么它对我有用:

    browser.td(:text => "Rate").parent.cell(:index, 2).text
    

    谢谢大家

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签