ошибка javascript: невозможно прочитать свойство toLowerCase неопределенного

Я пытаюсь взаимодействовать с теневым DOM из кода WATIR. Я использовал решение 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

введите здесь описание изображения


person Rajagopalan    schedule 10.11.2020    source источник


Ответы (1)


На данный момент здесь нет действительно хорошего ответа. Первоначальная проблема заключается в том, что теневой дом, прикрепленный к элементу, на самом деле не имеет имени тега. Отсюда и обезьянья нашивка Джастина. Но с обновлениями этот патч больше не работает. Новая проблема заключается в том, что теневые дома прикреплены к реальным элементам, но сам 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)". Я не знаю, как это обойти.
person Justjoehere    schedule 30.12.2020