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

Why doesn't Watir find script tag by src attribute

导航到任何页面,我可以查看 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) 的情况下检测到存在?

因为你要找的link没有https:,你要找的元素是这个,

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

所以写这段代码,它会起作用。

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

Watir 正在根据与 DOM 中存在的内容相匹配的字符串定位元素。如果调查 DOM,您会发现 https: 不存在,只有 //mathid.mathtag.com/d/i.js。浏览器驱动程序在查询属性值时将其翻译为包含 https,但 Watir 无法在定位时假定这一点。

这会起作用:

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