2017-05-09 107 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

相关问题