найти и кликнуть на кнопку по всплывающей подсказке

Приветствую!

Как можно кликнуть на кнопку, при наведении на которую появляется надпись Chart context menu?

<title>Chart context menu</title>

driver.SwitchTo().Alert().Accept();

driver.switchTo().defaultContent();
driver.switchTo().frame("");

Вопрос на не совсем понятен. Зачем наводить на кнопку, если Вам надо на неё нажать? жмите и всё

Что такое всплывающая подсказка?
Некий HTML элемент, который отображается при наведении курсора мышки?
Приведите пример страницы или снимок экрана.

вот такая кнопка, при наведении на нее, всплывает надпись Chart context menu:

код:

<g class="highcharts-button" style="cursor:default;" stroke-linecap="round" transform="translate(460,10)"><title>Chart context menu</title><rect x="0.5" y="0.5" width="24" height="22" fill="white" stroke="none" stroke-width="1" rx="2" ry="2"></rect><path fill="#E0E0E0" d="M 6 6.5 L 20 6.5 M 6 11.5 L 20 11.5 M 6 16.5 L 20 16.5" stroke="#666" stroke-width="3"></path><text x="0" style="color:black;fill:black;" y="12"></text></g>
 <title>Chart context menu</title>
 <rect x="0.5" y="0.5" width="24" height="22" fill="white" stroke="none" stroke-width="1" rx="2" ry="2"></rect>

на кнопку можно кликнуть по локатору #highcharts-8 > svg > g.highcharts-button, но только один раз, т.к. при следующем открытии браузера он поменяется (цифра 8 на другую).

Воспользуйся Xpath:
//*[starts-with(@id, "highcharts-")]/svg/g[@class="highcharts-button"]
и пофиг какая там цифирь будет…

 FAIL  Clickable element //*[starts-with(@id, "highcharts-")]/svg/g[@class="highcharts-button"] was not found by text|CSS|XPath

А так не пробовали?

//g[@class='highcharts-button']

или так

//title[text()='Chart context menu']/..

Вот, яркий пример бездумного использование предполагаемого локатора без проверки его в браузере.
Т.к. не было предоставлено более широкого фрагмента страницы, то локатор предположительный и требует соответственно доработки

1 Like

Если использовать одинарные кавычки вообще выдает:

 ERROR  missing ) after argument list

заметил, что по xpath вообще не получается кликнуть на этот элемент, даже использовать xpath который дает селектор в инспекторе хрома.

 FAIL  Clickable element //*[@id="highcharts-0"]/svg/g[1]/path was not found by text|CSS|XPath

Предлагаю вопсользоваться дебаг режимом, включив pause() перед местом где вам нужно кликнуть. Включится интерактивная консоль. В ней постарайтесь попробовать все возможные селекторы.

Я бы продебажил через I.grabTextFrom() - находит ли локатор и что в нем.

Также в крайнем случае можно кликнуть средствами JavaScript, но для этого всё равно надо найти нужный объект. Если у вас есть jquery это может быть что-то в стиле:

I.executeScript(() => $('CSS-selector-for-element').click());

может дело в namespaces ?
SVG tests
требуют замены

//svg/rect

на

/html/body/*[name() = "svg"]/*[name() = "rect"]

ну и т.д.
?
это все описано java - Selenium WebDriver: clicking on elements within an SVG using XPath - Stack Overflow