为什么 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')
导航到任何页面,我可以查看 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')