为什么 return document.getElementsByClassName 有效而 getElementbyId 不在 Watir 中?

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

我有这行代码:

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' 为什么使用 Class 名称获取元素有效,而使用 Id 获取元素无效?

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

document.getElementById("street")[0]

不是 return HTML 个元素的数组,它 return 只是一个元素。

所以不用[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 参见 doc

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