Ruby Watir - 如何选择

时间:2013-10-15 17:13:15

标签: ruby ajax watir

您好我正在尝试选择一个编辑按钮,我很难选择它。

<td>
  <a onclick="new Ajax.Request('/media/remote/edit_source/3', {asynchronous:true, evalScripts:true}); return false;" href="#">
  <img title="Edit" src="/media/images/edit.gif?1258500617" alt="Edit">
</a>

我在('/ media / remote / edit_source / 3')的末尾有一个数字,它改变了,我把它存储在@rep_id变量中。

我无法使用xpath,因为表经常更改。有什么建议?任何帮助是极大的赞赏。以下是我的尝试和失败。我对watir很新,喜欢它,但有时候我遇到这样的事情并且难以接受。

browser.a(:text, "/media/remote/edit_source/#{@rep_id}").when_present.click

2 个答案:

答案 0 :(得分:1)

从您的示例中,看起来您正在使用onclick事件处理程序中的URL作为:text定位器,除非该文本确实存在,否则我预计会失败。

您可以点击img。例子:

browser.image(:title, "Edit").click 
browser.image(:src, "/media/images/edit.gif?1258500617").click 
browser.image(:src, /edit\.gif\?\d{10}/).click                  # regex the src

否则,您可能需要使用fire_event方法来触发事件处理程序,如下所示:

browser.link(:id, "foo").fire_event "onclick"

这些是指向watirwatir-webdriverfire_event文档的链接以供参考。

答案 1 :(得分:1)

该行:

browser.a(:text, "/media/remote/edit_source/#{@rep_id}").when_present.click

失败是因为:

  1. 您要查找的内容位于onclick属性(而不是文本)
  2. 为第二个参数传递一个字符串。这意味着它正在寻找与之完全匹配的东西。鉴于您只使用部分文本/属性,您需要使用正则表达式。
  3. 如果您使用的是watir-webdriver,则支持通过其:onclick属性定位元素。您可以使用正则表达式来部分匹配:onclick属性。

    browser.link(:onclick => /#{Regexp.escape("/media/remote/edit_source/#{@rep_id}")}/).when_present.click
    

    如果您还使用watir-classic(用于IE测试),则上述操作无效。相反,您可以检查链接的HTML。检查html也适用于watir-webdriver,但可能不如使用:onclick。

    browser.link(:html => /#{Regexp.escape("/media/remote/edit_source/#{@rep_id}")}/).when_present.click