Мы используем веб-драйвер selenium и python для автоматизации тестирования и пытаемся автоматизировать приложение html5 с дизайном тени. Не удалось идентифицировать элементы, которые попадают под теневой корень. Напр. Если я хочу получить доступ к любому элементу под теневым корнем, указанному ниже, то как я могу это сделать? Любая помощь приветствуется.Кто-нибудь знает, как идентифицировать веб-элементы теневого дома, используя selenium webdriver?
ответ
Вы можете вводить этот кусок JavaScript, что делает это, а затем запустить методы find_element на этом элементе:
shadow_section = mydriver.execute_script('''return document.querySelector("neon-animatable").shadowRoot''')
shadow_section.find_element_by_css(".flex")
, поскольку вы часто используете, что вы можете создать функцию,, то выше становится:
def select_shadow_element_by_css_selector(selector):
running_script = 'return document.querySelector("%s").shadowRoot' % selector
element = driver.execute_script(running_script)
return element
shadow_section = select_shadow_element_by_css_selector("neon-animatable")
shadow_section.find_element_by_css(".flex")
на результирующем элементе, который вы можете поместить любого из методов:
find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector
Чтобы найти несколько элементов (эти методы будут возвращать список):
find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector
позже редактировать:
много раз корневые элементы вложены и второй вложенной элемент больше не доступен в документе, но доступен в текущем доступном теневом корне. Я думаю, что лучше использовать селеновые селекторы и впрыснуть сценарий просто взять тень корень:
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
#the above becomes
shadow_section = expand_shadow_element(find_element_by_tag_name("neon-animatable"))
shadow_section.find_element_by_css(".flex")
Чтобы поместить это в перспективу я просто добавил проверяемой пример с загрузкой страницы в Chrome, нажав на потребности кнопки поиска открытой 3 вложенная теневые элементы корня:
import selenium
from selenium import webdriver
driver = webdriver.Chrome()
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
selenium.__file__
driver.get("chrome://downloads")
root1 = driver.find_element_by_tag_name('downloads-manager')
shadow_root1 = expand_shadow_element(root1)
root2 = shadow_root1.find_element_by_css_selector('downloads-toolbar')
shadow_root2 = expand_shadow_element(root2)
root3 = shadow_root2.find_element_by_css_selector('cr-search-field')
shadow_root3 = expand_shadow_element(root3)
search_button = shadow_root3.find_element_by_css_selector("#search-button")
search_button.click()
- 1. Как идентифицировать этот элемент с помощью Selenium Webdriver
- 2. Как это сделать, используя Selenium Webdriver?
- 3. Как заставить Selenium Webdriver сфокусироваться (используя C#)?
- 4. Как дважды щелкнуть элемент, используя Selenium Webdriver
- 5. Как показать стили CSS из теневого дома в Chrome DevTools
- 6. Невозможно идентифицировать элементы в Selenium webdriver для IE9
- 7. Проблемы с Selenium WebDriver
- 8. selenium webdriver не может идентифицировать элементы из-за обновления страницы.
- 9. Включить/отключить javascript, используя Selenium WebDriver
- 10. Невозможно нажать кнопку «Отправить», используя selenium webdriver
- 11. Найти элемент, созданный javascript, используя selenium webdriver
- 12. Selenium: Не удается идентифицировать объект, используя поставщика данных
- 13. Переключить кнопку мыши, используя selenium webdriver
- 14. Нажмите на гиперссылку, используя Selenium Webdriver
- 15. Невозможно нажать кнопку, используя selenium Python webdriver
- 16. Найти номер строки таблицы, используя selenium webdriver
- 17. Selenium: Как идентифицировать кнопку WebElement
- 18. Selenium Webdriver и XStudio
- 19. iFrame не идентифицируется Selenium Webdriver
- 20. Как прокрутить элемент с помощью Selenium WebDriver, используя C#
- 21. Python + Selenium Webdriver
- 22. Локаторы Selenium Webdriver
- 23. Как расписание сценария Selenium WebDriver
- 24. Selenium webdriver- Определить элемент
- 25. Как установить Selenium WebDriver, работающий с драгоценным камнем selenium-webdriver
- 26. Cloneable and WebDriver (Selenium)
- 27. Selenium webdriver идентифицирует кнопку и нажимая на нее, используя Java
- 28. Selenium Webdriver: cssselector
- 29. Selenium + WebDriver :: предложите библиотеку WebDriver
- 30. Selenium WebDriver с Perl
http://stackoverflow.com/q/36139212/954442, http://stackoverflow.com/questions/28911799/accessing-elements-in-the-shadow-dom –