在使用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>
答案 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