访问Watir中没有属性的元素
-
26-10-2019 - |
题
使用watir,有没有一种方法可以访问没有属性的元素?
例如:
<span>Text</span>
我想避免使用XPATH,但是如果这是唯一的酷方法。
解决方案
首先忽略了具有标签的非Watir问题,或者请求开发人员(或您自己)的唯一属性,您始终可以通过其父元素或索引访问元素。
例如:文字
@browser.div(:name => "content").span(:index => 1)
#this is the first span element inside this div
您可以在不使用XPATH的情况下到达儿童跨度元素之前需要处理许多独特的元素。当然,您只需要一个独特的父元素即可到达该特定的子元素,然后将其从中努力。
div(:how => what).table(:how => what).td(:how => what).span(:how => what).text
另一个例子,假设是 nth 页面上的跨度: @browser.span(:index =>> n)
但是,当对页面进行任何更新时,审核方法非常脆弱,很容易破裂。
其他提示
如果有文字:
browser.span(:text => "Text")
如果您只知道文本的一部分,则可以使用正则表达式:
browser.span(:text => /Text/)
基本上有三种方法可以解决这一特定挑战。 Zeljko已经解决了第一个基于 什么是 里面 元素 例如已知文本。亚当解决了最常见的方式, 什么是 封闭或包含 元素 我将解决第三种方式,那是 什么是 封闭 或者 旁 元素.
如果您有所需的已知元素,则可以从此开始并使用 .parent
获取“容器”元素的方法。这也可用于通过使用.parent来通过公共容器(例如表行)找到您想要的一个元素。第一次使用非常明显,但是第二种用途可能更普遍,并且在使用表工作时非常有用。
例如,假设您有一个具有多行数据的表,其中一个列是唯一的零件号,而另一列具有“添加到购物车”链接。现在,如果要在购物车中添加特定零件,则可以使用类似代码的索引与文本“添加到购物车”结合使用,基于它是该特定文本的第五个链接
browser.link(:text => 'add to cart', :index => 4).click
但这很脆弱,因为一旦结果改变(可以使用实时数据发生很多事情)您的零件不再是该表中的第五个,您的测试就会破裂。您需要进行一些验证,您找到了正确的部分,而在该行上没有其他内容。但是,在沃特尔,您可以做这样的事情:
browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click
在表单元格的情况下,单元格的母体通常是表行,因此用普通的英语为单词,这将翻译成“零件编号为123-45”的“查找单元格”,然后在同一行中找到然后单击“添加到购物车”链接。 (尽管我猜想您仅通过阅读代码就可以弄清楚这一点。)
您可以使用它来获取任何“兄弟姐妹”,甚至只是“父”本身,在您需要与对象旁边或内部有一些唯一的元素。
您可能可以使用XPATH类似的事情,但是在五个星期后阅读代码时,祝您好运。这是我非常喜欢Watir和Watir-Webdriver vs Selenium的原因之一。