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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top