Watir为什么无法通过src属性找到脚本标签

时间:2018-10-03 14:29:49

标签: ruby watir

导航到任何页面,我可以查看Watir附带的脚本:

b = Watir::Browser.new
b.goto "https://macys.com"
b.scripts.collect(&:src)
# => [ ..., "https://mathid.mathtag.com/d/i.js", ...]

结果是大量的脚本,我随机选择了一个脚本来查找:

b.script(src: "https://mathid.mathtag.com/d/i.js").html
# => Watir::Exception::UnknownObjectException: timed out after 30 seconds, waiting for #<Watir::HTMLElement: located: false; {:xpath=>"//script[@src='https://mathid.mathtag.com/d/i.js']"}> to be located; Maybe look in an iframe?
# ...

但是它从来没有以这种方式找到任何脚本。为什么?如何在不调查scripts.collect(&:src)的情况下检测到存在?

2 个答案:

答案 0 :(得分:2)

Watir正在基于与DOM中存在的字符串匹配的元素来定位元素。如果研究DOM,您会发现https:不存在//mathid.mathtag.com/d/i.js。浏览器驱动程序在查询属性值时将其转换为包含https,但是Watir无法在定位时假定这一点。

这将起作用:

browser.script(src: '//mathid.mathtag.com/d/i.js')

答案 1 :(得分:1)

这是因为您尝试的链接没有https:,您要查找的元素是这个

<script type="text/javascript" async="" src="//mathid.mathtag.com/d/i.js"/>

因此编写此代码,它将起作用。

p b.script(src: "//mathid.mathtag.com/d/i.js").html
相关问题