在Watir中访问没有属性的元素

时间:2011-11-30 18:24:03

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

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

例如:

<span>Text</span>

我想避免使用xpath,但如果这是唯一的方式很酷。

3 个答案:

答案 0 :(得分:11)

无视首先拥有标记的非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 =&gt; n

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

答案 1 :(得分:9)

如果有文字:

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

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

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

答案 2 :(得分:8)

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

如果你有一个已知元素在你想要的元素内,那么你可以从那开始并使用.parent方法来获取'container'元素。这也可以用来查找'兄弟'元素,方法是使用.parent通过公共容器(如表格行)获取所需的元素。第一次使用是相当明显的,但第二种用法在使用表时可能更常见且非常有用。

例如,假设您有一个包含多行数据的表,其中一列是唯一的部件号,另一列是“添加到购物车”链接。现在,如果你想在你的购物车中添加一个特定的部分,你可以使用索引结合文本'添加到购物车'使用这样的代码,因为它是该特定文本的第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的原因之一。