繁体   English   中英

javascript 错误:无法读取未定义的属性“toLowerCase”

[英]javascript error: Cannot read property 'toLowerCase' of undefined

我正在尝试通过 WATIR 代码与 shadow DOM 交互。 我使用了 JustinKo 的解决方案,如下所示。 但它抛出以下错误

Backtrace:: javascript error: Cannot read property 'toLowerCase' of undefined (Selenium::WebDriver::Error::JavascriptError)

当程序遇到这条线时

Watir.element_class_for(element.tag_name.downcase).new(scope, element: element)

我的程序

require 'watir'

# Monkey-patch due to being unable to check the tag name of the shadow root
class Watir::Browser
  def wrap_element(scope, element)
    Watir.element_class_for(element.tag_name.downcase).new(scope, element: element)
  rescue Selenium::WebDriver::Error::UnknownError # need a better rescue
    Watir::Element.new(scope, element: element)
  end
end



def expand_root_element(element, browser)
  browser.execute_script("return arguments[0].shadowRoot", element)
end


b=Watir::Browser.new
b.goto 'http://alis-core-lin01:8082/core_pl_env5/alis#alis'
element=b.element(xpath: "//vaadin-text-field[@id='user.name']")
shadow_dom=expand_root_element(element,b)
shadow_dom.text_field.set 'Raj'
puts 'Raj'

HTML

在此处输入图片说明

在这一点上,这里没有真正好的答案。 最初的问题是附加到元素的 shadow dom 实际上没有标签名称。 因此,贾斯汀的猴子补丁。 但是随着更新,该补丁不再有效。 新问题是 shadow dom 附加到真实元素,但 shadowRoot 本身不是真实元素。 它就像一个准元素。

  • 错误现在是Selenium::WebDriver::Error::JavascriptError ,因此您的救援行需要更新以获取正确的错误。
  • 即使您修复了该问题,您也会收到更多错误javascript error: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'这是对有线协议进行内部 API 调用的结果。 例如,我将错误追踪到selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:81 API 调用返回内部 500 错误,负载为"{"value":{"error":"javascript error","message":"javascript error: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.\\n (Session info: chrome=87.0.4280.88)"我不知道如何解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM