为什么 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]
我有这行代码:
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]