为什么返回文档.getElementsByClassName正在工作,而getElementbyId不在Watir中

Why is that return document.getElementsByClassName is working and getElementbyId is not in Watir?

本文关键字:getElementbyId 不在 Watir 工作 文档 返回 getElementsByClassName 为什么      更新时间:2024-02-15

我有这行代码:

puts @browser.execute_script('return document.getElementsByClassName("modal-content")[0]').html

它工作,它显示我的页面源中的HTML标记。。但当我在其他领域使用时

puts @browser.execute_script('return document.getElementById("street")[0]').innerHTML

还有这行代码:

puts @browser.execute_script('return document.getElementById("street")[0]').html

我有一个错误,上面写着::NoMethodError:nil:NilClass的未定义方法"innerHTML"为什么使用类名获取元素有效,而使用Id获取元素无效?

另一个问题是,我们有没有可能得到页面来源的行号?

document.getElementById("street")[0]

它不返回HTML元素的数组,只返回一个元素。

所以只需在没有[0] 的情况下使用

puts @browser.execute_script('return document.getElementById("street").innerHTML')

更改:

puts @browser.execute_script('return document.getElementById("street")[0]').innerHTML

至:

puts @browser.execute_script('return document.getElementById("street")').innerHTML

getElementById重新运行对象或为null请参阅文档

正如名称getElementById所说,它只返回一个元素,因为ID应该给出一次。getElementsByClassName,返回一个元素数组,因为类可以多次使用。所以只需移除[0]