无法找到检测页面上是否存在元素的方法

时间:2011-03-19 02:09:31

标签: ruby watir

我对Watir很新。

我有一些Ruby / Watir代码,它应该检测一个元素是否存在,如果是,单击它,如果没有,单击一个不同的元素。这两个元素每次都会出现。不幸的是,我没有尝试过任何工作。

if browser.contains_text("/media/images/icons/reviewertools/editreview.jpg")
then browser.image(:src => "/media/images/icons/reviewertools/editreview.jpg").click
else browser.image(:src => "/media/images/icons/reviewertools/savereview.jpg").click
end

最终失败,“无法找到元素,使用{:src =>”/ media / images / icons / reviewertools / savereview.jpg“}(Watir :: Exception :: UnknownObjectException)”

它应该点击/editreview.jpg,这是可见的。

我也尝试过:

if browser.image("/media/images/icons/reviewertools/savereview.jpg").exists
then browser.image(:src => "/media/images/icons/reviewertools/savereview.jpg").click

以及:

if browser.image("/media/images/icons/reviewertools/savereview.jpg").exists?

请注意,这些情况中没有一个检测到该元素,或者没有执行此操作,执行else子句。

如果您回复,请为您的建议提供具体的代码示例。

4 个答案:

答案 0 :(得分:2)

  1. 只有“存在”的方法?并“存在?”。所以“存在”是行不通的。咨询here
  2. 您可以尝试识别不同元素的存在,例如链接。对你起作用吗?不应该有例外。在这种情况下,Watir需要返回False。

答案 1 :(得分:2)

您需要对click和exists使用相同的语法吗?方法。 Kat和Chuck以及Kinofrost也指出了这一点。

if browser.image(:src => "/media/images/icons/reviewertools/editreview.jpg").exists?
then browser.image(:src => "/media/images/icons/reviewertools/editreview.jpg").click
else browser.image(:src => "/media/images/icons/reviewertools/savereview.jpg").click
end

答案 2 :(得分:1)

我建议检查DOM,仔细检查你的图像的src是否符合你的要求。在IE8中按F12,或使用与浏览器相关的任何工具。您可以尝试使用IRB连接到浏览器并尝试查找图像。

如果这些失败,那么我会尝试以另一种方式定位图像。如果图像处于某种形式,这可能会导致问题,您必须在图像之前找到该表单。

或尝试其他方式找到它,只是为了确保它是可能的。

browser.image(:index => 3).click
browser.image(:id => 'an_image').click
browser.div(:id => 'image_container').image(:index => 2).click

您可以使用this link查看识别图像的方法,并且不要忘记您一次可以使用多个标识符,例如。 (:class => / regexofaclass /,:index => 2)

您的代码没有任何问题(除了“存在”末尾的?,以及不包含您要查找的内容的最后一行)。

答案 3 :(得分:1)

假设这个东西确实是由它的HTML标签定义的'图像',那么你试图识别对象是否存在就会失败,因为

  1. 你没有在Ruby中使用正确的方法,在问号中返回bool结尾的方法
  2. 这不是文字,
  3. 并且在另一次尝试中,您只提供了“什么”而不是如何,并且仍然使用了错误的方法。

    试试这个

    if browser.image(:src, "/media/images/icons/reviewertools/savereview.jpg").exists?
    then browser.image(:src, "/media/images/icons/reviewertools/savereview.jpg").click
    

    否则好好看看HTML,你真的在​​看一个'按钮'吗?