6

没有属性使用的Watir,有没有不带属性访问元素的方法吗?访问的元素在的Watir

例如:

<span>Text</span> 

我想避免使用XPath,但如果这是唯一的方式,它的凉爽。

回答

10

忽视其在第一时间标签,或从您的开发者(或自己)请求独特属性的非的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 

又如,假设它是在第n个跨度在页面上: @ browser.span(:指数=>Ñ

该副指数的方法是非常脆并且容易但是当对页面进行任何更新时都会中断。

+1

注意,这仅仅是第一区间,如果你正在使用旧版本的Watir的其中使用一个基于索引,用的Watir 2.x或的Watir,其中的webdriver使用从零开始的索引(像Ruby)':指数=> 1'将在div –

9

如果有文字:

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

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

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

基本上有三种方法来解决这一特殊的挑战。泽利科已经解决了基于是什么元素如已知的文本第一。亚当解决最常见的方式,是什么封闭或含有元素我会解决的第三条道路,这是什么封闭式通过元素旁边。

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

例如假设你有其中一列就是唯一的零件编号多行数据的表,另一列已经“加入购物车”的链接。现在,如果你想要一个特定部分添加到您的购物车,你可以使用索引使用这样的基于它是与特定文本第五链接代码与文本“添加到购物车”组合拳

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的原因之一。

+2

内的跨度二审我从来不敢想象的那么多回答一个简单的问题。 –

+3

一个简单的问题,但以非常规的形式呈现,没有任何上下文或周围的HTML。因此,各种答案远不及问题的一般性。毫无疑问,我正在解决一个更狭窄的利基..嗯,一个有用的编辑浮现在脑海中。 –

+1

@DaveMcNulla,我的修改后的答案现在把其他答案放在更多的背景下吗? –