【问题标题】:Accessing an element with no attributes in Watir在 Watir 中访问没有属性的元素
【发布时间】:2012-01-09 23:35:30
【问题描述】:

使用 Watir,有没有办法访问没有属性的元素?

例如:

<span>Text</span>

我想避免使用 xpath,但如果这是唯一的方法,那就太酷了。

【问题讨论】:

    标签: automation automated-tests watir watir-webdriver webautomation


    【解决方案1】:

    首先忽略非 WATIR 问题,即拥有标签,或向开发人员(或您自己)请求唯一属性,您始终可以通过其父元素或索引访问元素。

    例如: 文本

    @browser.div(:name => "content").span(:index => 1)
    #this is the first span element inside this div
    

    在到达子 span 元素之前,您可以处理许多您需要的独特元素,而无需使用 Xpath。当然,您只需要一个唯一的父元素即可到达该特定子元素,然后您就可以从该子元素向下处理。

    div(:how => what).table(:how => what).td(:how => what).span(:how => what).text
    

    另一个例子,假设它是页面上的 nth 跨度: @browser.span(:index => n)

    但是,按索引的方法非常脆弱,并且在对页面进行任何更新时容易中断。

    【讨论】:

    • 请注意,如果您使用的是使用一个基于索引的旧版本的 Watir,它只是第一个跨度,而 Watir 2.x 或 Watir-Webdriver 使用基于零的索引(如 Ruby)@987654323 @ 将是 div 中跨度的第二个实例
    【解决方案2】:

    如果有文字:

    browser.span(:text => "Text")
    

    如果你只知道部分文本,你可以使用正则表达式:

    browser.span(:text => /Text/)
    

    【讨论】:

      【解决方案3】:

      基本上有三种方法可以解决这一特殊挑战。 Zeljko 已经解决了第一个问题,它基于 inside 元素,例如已知文本。 Adam 介绍了最常见的方式,什么是封闭或包含元素我将介绍第三种方式,即什么是封闭式 或元素旁边

      如果您有一个已知元素在您想要的元素中,那么您可以从它开始并使用.parent 方法获取“容器”元素。这也可以用于查找“兄弟”元素,方法是使用 .parent 通过一个公共容器(如表格行)获取您想要的元素。第一种用法很明显,但第二种用法可能更常见,并且在处理表格时非常有用。

      例如,假设您有一个包含多行数据的表,其中一列是唯一的零件编号,另一列具有“添加到购物车”链接。现在,如果您想将特定部分添加到购物车,您可以使用 Index 与文本“添加到购物车”结合使用这样的代码,因为它是包含该特定文本的第 5 个链接

      browser.link(:text => 'add to cart', :index => 4).click
      

      但这很脆弱,因为一旦结果发生变化(实时数据可能会发生很多情况),您的部分不再是该表中的第 5 个,您的测试就会中断。您需要进行一些验证,您已经找到了正确的部分,而不是该行上的其他内容。但是,在 watir 中,您可以执行以下操作:

      browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click
      

      在表格单元格的情况下,单元格的父级通常是表格行,因此用简单的英语翻译为“找到其中包含“部件号 123-45”的单元格,然后在同一行找到并单击“添加到购物车”链接。 (虽然我猜你只是通过阅读代码就知道了。)

      您可以使用它来获取任何“兄弟”,甚至只是“父”本身,其中在您需要与之交互的对象旁边或内部有一些独特的元素。

      您可能可以用 Xpath 做一些类似的事情,但是在五周后阅读代码时,祝您好运。这就是我非常喜欢 Watir 和 Watir-Webdriver 而非 Selenium 的原因之一。

      【讨论】:

      • 我从来没有想过一个简单的问题会有这么多答案。
      • 一个简单的问题,但以非常笼统的形式呈现,没有任何上下文或周围的 HTML。因此,答案的多样性远不及问题的普遍性。诚然,我正在解决一个更狭窄的利基市场。嗯,我想到了一个有用的编辑。
      • @DaveMcNulla,我修改后的答案现在是否将其他答案置于更多上下文中?
      • 这确实可以理解三个不同的答案。我也很感激我学到的关于使用对象中的关系来代替 xpath 解决方案来查找和操作的教训。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多