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

car*_*day 6 automation automated-tests watir webautomation watir-webdriver

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

例如:

<span>Text</span>
Run Code Online (Sandbox Code Playgroud)

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

ada*_*eed 11

不考虑其摆在首位的标签,或从您的开发者(或自己)请求独特属性的非的Watir的问题,你可以随时通过它的父元素,或者通过索引来访问的元素.

例如:文字

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

在不使用Xpath的情况下,您可以在到达子span元素之前处理所需的许多独特元素.当然,您只需要一个唯一的父元素来访问该特定的子元素,然后从该元素向下工作.

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text
Run Code Online (Sandbox Code Playgroud)

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

然而,当对页面进行任何更新时,按索引方法非常脆弱并且容易破坏.


Žel*_*pin 9

如果有文字:

browser.span(:text => "Text")
Run Code Online (Sandbox Code Playgroud)

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

browser.span(:text => /Text/)
Run Code Online (Sandbox Code Playgroud)


Chu*_*den 8

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

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

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

browser.link(:text => 'add to cart', :index => 4).click
Run Code Online (Sandbox Code Playgroud)

但是,这是脆的,因为一旦业绩变动,(它可以发生很多与现场数据)的部分不再是一个5号在该表中,您的测试将打破.你需要一些验证,你已经找到了正确的部分,而不是那一行.但是,在watir中,您可以执行以下操作:

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

在表格单元格的情况下,单元格的父级通常是一个表格行,因此用简单的英语翻译为"找到包含"部分号123-45"的单元格,然后在同一行中查找并点击"添加到购物车"链接.(虽然我猜你只是通过阅读代码来解决这个问题.)

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

你可以做一些类似于Xpath的事情,但是五周之后阅读代码时可以从中获得任何意义.这是我非常喜欢Watir和Watir-Webdriver与Selenium的原因之一.

  • 一个简单的问题,但是以非常一般的形式呈现,没有任何上下文或周围的HTML.因此,各种各样的答案远不如问题一般.我无疑正在寻找一个更狭隘的利基..嗯,一个有用的编辑浮现在脑海中. (3认同)
  • 这确实有三个不同的答案.我也很欣赏我在使用对象中的关系来寻找和操作代替xpath解决方案的教训. (3认同)
  • 我从未想象过如此多的简单问题答案. (2认同)