2017-05-09 34 views
0

Java dev之間並且新到Xpath時。谷歌搜索和RTFM編輯相當多,但卡住了。公司使用Java Wicket框架以Java編寫大型網絡應用程序。將Selenium與Cucumber和Junit結合使用進行測試。因此需要編寫大量的Xpath表達式。 卡住以下。Xpath。無法選擇標籤文本 - 當<input>之類的其他元素位於<label>標籤

一個窗體和兩個切換()和它後面的文本的屏幕。相關片段。

<label> 
    <input id="idf1" name="removeConditionViaTreeStep:resultsRadioGroup" value="radio3" checked="checked" type="radio"> 
    Safe to delete 
    </label> 

    <label> 
    <input id="idf2" name="removeConditionViaTreeStep:resultsRadioGroup" value="radio4" type="radio"> 
    Unsafe to delete 
    </label> 

注:使用Wicket框架意味着屬性ID和值是/每個應用程序運行,因此不能使用它們的時間可以是不同的。不能更改html。

A計劃 我想選擇一個特定的觸發(和模擬點擊/選擇它)通過使用標籤文本作爲uniq的選擇,但事實是,標籤之間有..給我的問題。在乾淨的標籤情況下,我可以毫無問題地選擇某個標籤。 在這種情況下,無法獲取// label [contains(text(),'Unsafe to delete')]等工作。

放棄了,去了B計劃。

使用firepath插件Firebug的測試,並具有以下想出了://輸入[@名稱=「removeConditionViaTreeStep:resultsRadioGroup」] 這導致firepath在兩場比賽中。我希望使用類似[2]的選擇第二個切換,但無法弄清楚。

C計劃 - 求助於Java和Xpath。
List elements = findElementsByXpath(「// input [@ name ='removeConditionViaTreeStep:resultsRadioGroup']」); elements.get(1)//選擇第二個切換。

有這種感覺「//標籤[包含(text(),'不安全刪除')]」不起作用,因爲一切都流式傳輸,硒的Webdriver沒有任何東西存儲在內存中。因此,元件切斷流或類似的東西......

也許有人可以給一些提示和指針或者甚至計劃A和B液

編輯矯正右括號作爲錯字比爾Hileman提到。

+1

嘗試'「//標籤[normalize-space()='不安全刪除']」' – Andersson

+0

你試過類似'元素的東西。getAtrribute(「textContent」);' – kushal

回答

0

我知道你說你不能更改HTML,但也許你可以在測試環境中的wickets開發模式下運行應用程序?這樣,如果我沒有記錯,應該渲染wicket:id,並且您可以更容易地選擇元素。

+0

測試需要在生產模式下針對Wicket應用程序運行。開發模式在硒不喜歡的呈現頁面上引入了一些額外的東西。否則,我甚至可以做一些像https://www.jdev.it/testing-a-wicket-application-with-selenium-ide/中提到的東西。但是幾年前,該團隊已經決定反對,因爲html會被污染很多,而且如果我們有複雜的頁面,如果有什麼東西會被添加的話,它會輕易地破壞測試。那就是開發者告訴我的。感謝您的評論btw。 – user1987876

0

你的XPath嘗試你輸入的是:

//label[contains(text(),'Unsafe to delete'] 

除非這是一個錯字這裏只,你錯過了一個右括號。

//label[contains(text(),'Unsafe to delete')] 

該xpath應該工作。

+0

即使有一個右括號,「XPath」也不起作用 – Andersson

+0

您的意思是它不會返回標籤webelement或它不會被點擊?如果後者只是添加/輸入到最後會得到輸入元素,或者我又錯了嗎? '// label [contains(text(),'Unsafe to delete')]/input' –

+0

我的意思是它不會返回一個'label'。如果你檢查count(// label/text())'你會看到它返回'2'。這意味着'label'元素有兩個文本節點:第一個只包含空格字符 - 它不包含任何'「不安全刪除」'。應該工作的是'//標籤[包含(text()[2],'不安全刪除')]''。請注意,您在第二個文本節點中搜索「不安全刪除」,其中包含必需的字符串 – Andersson

相關問題