在无序列表中查找文本,然后单击该列表项中的链接

时间:2015-02-03 20:47:18

标签: ruby watir watir-webdriver

在使用watir的ruby脚本中,我试图在无序列表中的列表项中查找文本,然后单击该列表项中的链接。在下面的示例中,我想找到“Apple”并点击链接,将您带到http://samplegrocerystore.com/tehnc34

<div class="col-login">
<img class="logo" src="/images/hello.png" />
<h1 style="margin-top:15px;">Select Account</h1>
You have multiple accounts -- please select the one you would like to log in with.
<ul>
<li><h3>The Grocery Store</h3><h4>Chapter: Apple (#01)</h4>
<br/><strong><a href="http://samplegrocerystore.com/tehnc34">Login to this account</a></strong>
</li><li>
<h3>The Grocery Store</h3><h4>Chapter: Banana (#02)</h4>
<br/><strong><a href="http://samplegrocerystore.com/896ghv">Login to this account</a></strong>
</li>
</ul>
</div>

3 个答案:

答案 0 :(得分:2)

我猜你是说你不提前知道链接href?

假设您使用名为Watir::Browser的{​​{1}}变量打开了相关网页:

处理列表项(Apple)中的唯一文本

browser

应点击所需的链接。

或者,如果您提前知道链接href,则更容易使用:

browser.li(:text, /Apple/).link(:text, 'Login to this account').click

如果您的网页使用正则表达式找到Apple可能会变慢的话,那么任何一个都应该可以工作。

答案 1 :(得分:0)

根据您的HTML,您可以使用列表集合上的find方法来查找具有指定文本的元素,然后单击列表元素中的链接:

li = lists.find { |el| el.text.include? "Apple"}
li.a.click

答案 2 :(得分:0)

在irb中尝试以下内容:

browser.h4(:text => /Apple/).links.count
browser.h4(:text => /Apple/).parent.links.count
browser.h4(:text => /Apple/).parent.parent.links.count

直到您只用1个链接找到答案,那么这就是&#39; Apple&#39;之后的直接链接。文本。然后就像下面这样打电话:

browser.h4(:text => /Apple/).parent.link.click