2017-01-24 7 views
2

У меня есть объект SVG с несколькими элементами прямоугольника. Используя geckodriver, я пытаюсь нажать на один из основных объектов SVG. Однако с помощью xpath-checker я не могу определить правильный номер xpath.Selenium WebDriver [Java]: Как нажимать на элементы в SVG с помощью XPath

До сих пор, я могу развернутом через xpath ДО:

id('avg_score_chart')/div/div[1]/*[local-name()='svg' and namespace-uri()='http://www.w3.org/2000/svg'] 

HTML Мой код выглядит следующим образом:

<div id="avg_score_chart" class="chart" style="height: 250px; color: black ! important; overflow: hidden; text-align: left;"> 
<div class="amcharts-main-div" style="position: relative;"> 
<div class="amcharts-chart-div" style="overflow: hidden; position: relative; text-align: left; width: 525px; height: 212px; padding: 0px;"> 
<svg version="1.1" style="position: absolute; width: 525px; height: 212px; top: 0.450012px; left: -0.5px;"> 
<desc>JavaScript chart by amCharts 3.17.1</desc> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g transform="translate(60,52)"> 
<g transform="translate(96,41)"> 
<g transform="translate(96,123)"> 
<g transform="translate(96,123)"> 
<path cs="100,100" d="M0.5,0.5 L0.5,-81.5 L30.5,-81.5 L30.5,0.5 L0.5,0.5 Z" fill="rgb(242,244,28)" stroke="rgb(242,244,28)" fill-opacity="0.8" stroke-width="1" stroke-opacity="0.8"> 
</g> 
<g transform="translate(318,123)"> 
<g transform="translate(318,123)"> 
<g transform="translate(318,123)"> 
</g> 
</g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
<g> 
</svg> 

Может кто-нибудь помочь мне, пожалуйста?

ответ

1

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

//div[@id="avg_score_chart"]//*[name()="svg"] 

Для <g> элементов:

//div[@id="avg_score_chart"]//*[name()="svg"]/*[name()="g"] 

Update

Наконец, это должно быть почти лучший вариант :

//div[@class="portlet light boxshadow"][contains(.,"Store Wise Performance")]/div//div[@class="amcharts-chart-div"]/*[name()="svg"]//*[name()="g"]/*[name()="path" and @fill="rgb(242,244,28)"] 
+0

Это странно ... Я бы ожидал, что SVG тег работать как любой другой тег, например, '// ДИВ [@ ид = "avg_score_chart"] // svg'. Вы знаете, почему вы должны использовать 'name()'? – JeffC

+1

Для некоторых тегов (в основном из 'XML'' DOM') нужно использовать '/ * [name() = tag_name]' синтаксис вместо обычного '/ tag_name' ... Извините, не знаю, почему это так – Andersson

+0

@ Dev, пожалуйста, отметьте этот ответ как «Принято», если он решит вашу проблему. Спасибо – Andersson

1

как насчет: //div[@id='avg_score_chart']//*[local-name()='svg']/*[*[local-name()='path']]

где вы находите любой элемент с элементом «путем» внутри элемента «» внутри SVG элемента «сНа» с идентификатором 'avg_score_chart.

Edit: поместил в XPath блока кода

+0

Спасибо за вашу любезную помощь. Я попробовал оба варианта, но xPathChecker не обнаружил исключение элемента & Eclipse throws: // div [@ id = 'avg_score_chart'] // [local-name() = 'svg']/[* [local- name() = 'path']] и // div [@ id = 'avg_score_chart'] // [local-name() = 'svg']/[* [local-name() = 'path'] [ start-with (@d, 'M371.75,174.28l')]] Можете ли вы, пожалуйста, направить меня дальше? – DebanjanB

+0

Подождите, пока некоторые из персонажей не пропали ... возможно, удалось избежать. Вот правильный: '// div [@ id = 'avg_score_chart'] // * [local-name() = 'svg']/* [* [local-name() = 'path']]' – becixb

+0

take примечание звездочки перед local-name() = 'svg' и две звездочки перед local-name() = 'path' – becixb