使用Watir,有没有办法访问没有属性的元素?
例如:
<span>Text</span>
我想避免使用xpath,但如果这是唯一的方式很酷。
答案 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的原因之一。