使用watir-webdriver,我试图点击" down"屏幕上某些已知文本旁边的按钮(在本例中为"An Example"
)。当我单击向下按钮时,文本本身将向下移动一个任意长度的列表。我并不总是知道文本在列表中的显示位置,并且文本或向下按钮上没有ID来唯一标识要单击的位置。该按钮附加了一个类("rowDown down"
),但由于可以有多行文本,因此按钮类不是唯一的。
在我无法获得唯一ID的情况下,我总是求助于XPath。
在这种情况下,我知道我关心的文本的XPath将以/div[2]
结尾
我要点击的按钮位于div[1]
,更具体地说,我想要的按钮将以div[1]/button[2]
结尾的XPath
问题是,如何使用watir-webdriver获取文本的XPath?
(我可以处理的完整XPath的一个示例是"//*[@id='sortOrder0']/tbody/tr[2]/td[1]/div[2]"
。)
或者,同样可以接受的是,是否有其他可靠的方法来获得我关心的按钮?
以下是我的HTML的相关部分,它会在单词"示例"旁边生成向上箭头和向下箭头:
<div>
<button class="rowUp up"></button>
<br />
<button class="rowDown down"></button>
</div>
<div>
An Example
</div>
答案 0 :(得分:1)
您可以使用text()
在XPath期间检查节点的文本。因此,您可以编写一个XPath,找到带有文本“An Example”的div,转到前面的div,然后单击向下按钮:
browser.button(xpath: '//div[normalize-space(text())="An Example"]
/preceding-sibling::div[1]
/button[contains(@class, "rowDown")]').click
就我个人而言,我发现这很难阅读且容易出错。我更喜欢使用基本定位器并将XPath生成留给Watir-Webdriver的内部。可以通过以下方式实现与XPath类似的效果:
browser.div(text: 'An Example').parent.button(class: 'rowDown').click