如何检测Watir中是否存在元素

我对Watir比较新,但是找不到关于如何检查元素是否存在的好文档(示例)。 当然有API规范,但如果我找不到一个例子,这些对我来说没什么意义。

我已经尝试了两种组合,但似乎没有任何工作……如果browser.image(:src“/media/images/icons/reviewertools/editreview.jpg”).exists那么…如果browser.image(:src” /media/images/icons/reviewertools/editreview.jpg”).exists? 然后…

如果有人对如何实现这一点有具体建议,请帮忙! 谢谢!

您似乎缺少参数之间的逗号。

应该

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

此外,您可以在将来查找此页面以了解支持的属性。

好像你正确使用它。 这是Watir的旧RDoc 。

它不起作用,因为Watir找不到它? 很难分辨,因为没有源或链接到正在测试的页面。 我认为我只使用image.exists? 。 通常,图像存在但未找到的错误包括:

  1. 如何与元素类型不兼容。 有一个备忘单可以帮助您查看可以在此处找到具有不同属性的对象类型。
  2. 什么是不正确的。 你可能不得不玩那个。 考虑尝试使用正则表达式字符串来匹配它,例如browser.image(:src,/ editreview.jpg /)。 作为最后的手段,也许使用element_by_xpath,但是有维护成本。
  3. 位置不正确。 也许元素在一个框架或类似的东西。 browser.frame(“detail”)。image(:src,/ editreview.jpg /)。

试试这些,但请告诉我有用的。 还有一件事,你要检查什么? 如果它是测试标准的一部分,您可以这样处理它。 如果你需要点击它,那么忘记.exists? 然后点击它。 Ruby会告诉你它是否存在。 如果您需要优雅,请了解开始/救援 。

祝好运,

戴夫

您发布的代码应该可以正常工作。 编辑:哎呀,错了。 正如Katmoon指出的那样,缺少逗号。

 browser.image(:src "/media/images/icons/reviewertools/editreview.jpg").exists? 

您可能会遇到的一个问题是,您指定的浏览器变量实际上是不存在的元素。

例如

 b = Watir::IE.start(ipAddress) b.frame(:name, "doesntExist).image(:src "/media/images/icons/reviewertools/editreview.jpg").exists? 

上面的代码将抛出Watir :: UnknownFrameException。 您可以通过首先validation帧存在或围绕开始/救援块中的代码来解决这个问题。