Как я могу щелкнуть по скачанному файлу при просмотре chrome: // downloads / - PullRequest
0 голосов
/ 20 декабря 2018

В рамках моего теста автоматизации, в моей спецификации функции ruby ​​capybara, я попытался написать тест, где из браузера chrome, после загрузки файла PDF, я захожу в chrome: // downloads / и хочу иметь возможностьщелкнуть файл, чтобы открыть его;однако из-за объектов теневых корней я не могу нажать на ссылку.Есть ли решение для достижения этой цели?

Ниже приведено то, что я пробовал, где он жалуется: NoMethodError: неопределенный метод `find 'для #Selenium :: WebDriver :: Element: 0x007f96dba3ba78

Код:

        visit 'chrome://downloads'
        sleep(1)
        root1 = find('downloads-manager')
        shadow_root1 = expand_shadow_element(root1)

        root2 = shadow_root1.driver.browser.find_element(:css, 'iron-list')
        shadow_root2 = expand_shadow_element(root2)

        root3 = shadow_root2.find('downloads-item')
        shadow_root3 = expand_shadow_element(root3)

        file_link = shadow_root3.find("file-link")
        file.link.click

    def expand_shadow_element(element)
        shadow_root = execute_script('return arguments[0].shadowRoot', element)
        return shadow_root
    end

1 Ответ

0 голосов
/ 20 декабря 2018

Вы пытаетесь вызвать методы Capybara для нативного элемента selenium-webdriver.Причина, по которой у вас есть собственный элемент selenium-webdriver, заключается в том, что вы используете execute_script, который не должен использоваться, когда вы ожидаете возвращаемое значение - вместо этого вы должны использовать evaluate_script

def expand_shadow_element(element)
  evaluate_script('arguments[0].shadowRoot', element)
end

или в последних версиях Capybara

def expand_shadow_element(element)
  element.evaluate_script('this.shadowRoot')
end

Это затем обернет возвращенный элемент selenium-webdriver в элемент Capybara и позволит использовать методы, которые вы ожидаете.Никаких гарантий того, насколько хорошо это работает с shadow dom, нет, поскольку поддержка тени еще не включена в спецификацию webdriver, так что в selenium-webdriver его поддержки не так много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...