2016-09-06 91 views
0

因此,這裏是我嘗試使用的當前XPath。由於動態xpath無法定位元素

//*[@id="highcharts-33"]/svg/g[3]/g[1]/text 

的問題是,這是一個動態的Xpath,所以古話叫做「highcharts-33」,「highcharts-34」等等......我做的論文圖表截圖點擊複選框。每當選中/取消選中複選框時,下一個圖表將具有不同的ID。

這裏是我得到在cmd錯誤:

NoSuchElementException異常:消息:無法定位元件:{ 「方法」: 「的xpath」, 「選擇器」:「// * [含有(@ id,'highcharts - ')]/svg/g [3]/g [1]/text「}

你可以在這裏看到我試圖使用」contains「。我也嘗試使用「開始 - 與」,但我仍然無法找到圖表。

這裏有事情我已經嘗試:

textvote = self.driver.find_element_by_xpath("//*[contains(@id,'highcharts-')]/svg/g[3]/g[1]/text").text 
textvote = self.driver.find_element_by_xpath("//*[starts-with(@id,'highcharts-')]/svg/g[3]/g[1]/text").text 

我搜索了堆棧溢出,看到它的一些話題,它總是啓動,與/或包含一個懸而未決的話題。所以我可能會使用starts-with /包含錯誤。

如果你想要我分享更多的代碼,請不要猶豫。 謝謝。

編輯:添加培訓相關HTML

<div id="chartListContainer"> 
<div id="chart0" class="gauge-chart" data-highcharts-chart="16"><div  class="highcharts-container" id="highcharts-33" 
<div class="highcharts-container" id="highcharts-33" 
<svg version="1.1" 
<g class="highcharts-data-labels highcharts-tracker" 
<g zIndex="1" 
<text x="0" zIndex="1" style="font-size:30px;font-family:Open Sans;color:#1abb1a;fill:#1abb1a;" y="32"><tspan>80.0% (4 votes)</tspan></text> 

我試圖從最後一行文字。

+0

添加培訓相關的html還有一個或兩個以上的級別 – Grasshopper

+0

需要分享您的HTML以及.. –

+0

請粘貼元素的html。 – Dalvenjia

回答

0

我假設有你<div id="highcharts-*>元素裏面只有一個<text>元素,所以你可以嘗試CSS選擇div[id^="highcharts"] text

textvote = self.driver.find_element_by_css("div[id^='highcharts-'] text").text 

這個CSS選擇<div>元素中的所有元素<text> ID爲開頭「highcharts-」 ,但如果你有多個<text>元素,你可能會遇到麻煩。

編輯:

之後再看看,似乎我是一個錯誤的假設,有有隻有一個<text>元素,一個固定的CSS選擇器來模仿你的XPath之一是:

textvote = self.driver.find_element_by_css("div[id^='highcharts-']>svg>g:nth-of-type(3)>g:nth-of-type(1)>text").text 
+0

確實有不止一個元素,所以你的第二個想法完美工作。非常感謝你的幫助。 – xZeasy