Как нажать наэлемент с использованием Selenium и Python - PullRequest
1 голос
/ 03 апреля 2019

При условии xpath ниже:

<svg:image xlink:href="some.svg" class="holder-38" width="24" height="268" preserveAspectRatio="none" x="426.7" y="473" type="image/svg+xml" data-ember-action="" data-ember-action-12238="12238">

Я могу получить к нему доступ с помощью xpath (без тега '*'):

'//*[@class="holder-38"]'

Но не могу получить доступ с тегом какsvg:image:

'//svg:image[@class="holder-38"]'

Как я могу указать тег здесь?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

<svg:image>

Элемент <svg:image> включает изображения внутри документов SVG.Он может отображать растровые изображения файлы или другие файлы SVG.Единственные форматы изображений, которые должны поддерживать программы SVG, это JPEG, PNG и другие файлы SVG.Поведение анимированного GIF не определено.

SVG-файлы, отображаемые с <image>, обрабатываются как изображение , где внешние ресурсы не загружаются, : посещенные стили не применяются и не могут быть интерактивными.Чтобы включить динамические элементы SVG, попробуйте <use> с внешним URL-адресом.Чтобы включить файлы SVG и запустить внутри них скрипты, попробуйте <object> внутри <foreignObject>.

Примечание :Спецификация HTML определяет <image> как синоним <img> при анализе HTML.Этот конкретный элемент и его поведение применяются только внутри документов SVG или встроенных SVG .


xlink: href

xlink: href *Атрибут 1045 * определяет ссылку на ресурс как ссылку <IRI>.Точное значение этой ссылки зависит от контекста каждого элемента, использующего ее.

Устаревшее с SVG 2 : эта функция больше не рекомендуется.Хотя некоторые браузеры могут по-прежнему поддерживать его, он, возможно, уже удален из соответствующих веб-стандартов, может быть в процессе удаления или может храниться только в целях совместимости.Избегайте его использования и обновляйте существующий код, если это возможно;см. таблицу совместимости внизу этой страницы, чтобы принять решение.Помните, что эта функция может перестать работать в любое время.

Примечание : SVG 2 устраняет необходимость в пространстве имен xlink, поэтому вместо xlink:href следует использовать href.


Решение

К click() на нужном элементе, вам нужно вызвать WebDriverWait для желаемого element_to_be_clickable, и вы можете использовать следующее решение:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[name()='svg:image' and starts-with(@class, 'holder') and contains(@xlink:href, 'some')]"))).click()

Примечание : необходимо добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 03 апреля 2019

Попробуйте следующий способ доступа к tag_name.

'//*[local-name()="svg:image"][@class="holder-38"]'

Чтобы щелкнуть по элементу, используйте Action Class.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.action_chains import ActionChains
elememnt=WebDriverWait(driver, 10).until(ec.presence_of_element_located(("xpath", '//*[local-name()="svg:image"][@class="holder-38"]')))
ActionChains(driver).move_to_element(elememnt).click().perform()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...