Java dev和Xpath的新手。谷歌搜索和RTFM编辑相当多但卡住了。公司有一个使用Java Wicket框架用Java编写的大型Web应用程序。将Selenium与Cucumber和Junit结合使用进行测试。因此需要编写许多Xpath表达式。 坚持以下内容。
一个带有表单的屏幕,两个切换()和文本在其后面。相关摘要。
<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选择器来选择特定的切换(并模拟单击/选择它),但是标签之间的事实......给了我一些问题。在干净的标签情况下,我可以毫无问题地选择某个标签。 在这种情况下,无法使用//标签[包含(text(),&#39;不安全删除&#39;)]。
放弃并选择B计划。
使用firepath addon for firebug进行测试,得出以下信息://输入[@name =&#39; removeConditionViaTreeStep:resultsRadioGroup&#39;] 这导致两个匹配中的firepath。我希望使用像[2]这样的东西来选择第二个切换,但是无法弄明白。
计划C - 借助Java和Xpath工作。
List elements = findElementsByXpath(&#34; //输入[@name =&#39; removeConditionViaTreeStep:resultsRadioGroup&#39;]&#34;);
elements.get(1)//选择第二个切换。
有这种感觉&#34; //标签[包含(文字(),&#39;不安全删除&#39;)]#34;不起作用,因为一切都是流式的,并且硒的Webdriver没有记忆。因此,元素打破了流或类似的......
也许有人可以为计划A和B提供一些提示和指示甚至解决方案。
编辑纠正了Bill Hileman提到的右括号拼写错误。
答案 0 :(得分:0)
我知道你说你不能改变HTML,但也许你可以在测试环境中以wickets开发模式运行应用程序?这样,如果我没记错的话,应该渲染color = mix(color, vec3(0.0,1.0,0.0), pct);
,您可以更轻松地选择元素。
答案 1 :(得分:0)
您输入的xpath尝试是:
function getIValues(){
var url = "./Servlet?ajaxAction=getIDetail&id="+id;
ajaxRequestForChange(url,"I");
}
function getFValues(){
var url = "./Servlet?ajaxAction=getFDetail&id="+id;
ajaxRequestForChange(url,"F");
}
function getCValues(){
var url = "./Servlet?ajaxAction=getCDetail&id="+id;
ajaxRequestForChange(url,"C");
}
var ajaxRequestForChange = function(url,fun) {
var strURL = url;
var xmlHttpRequest = false;
var self = this;
// Mozilla, Safari
if (window.XMLHttpRequest) {
self.xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
self.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpRequest.open("POST", strURL, true);
self.xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
self.xmlHttpRequest.onreadystatechange = function() {
if (self.xmlHttpRequest.readyState == 4) {
if (self.xmlHttpRequest.status == 200) {
var htmlString = self.xmlHttpRequest.responseText;
if(fun == 'I'){
setIValues(htmlString);
}
if(fun == 'F'){
setFValues(htmlString);
}
if(fun == 'C'){
setCValues(htmlString);
}
} else {
ajaxFailedCount++;
// Try for 1 min (temp fix for racing condition)
if (ajaxFailedCount < 1200) {window.setTimeout(function() {ajaxRequest(url)}, 50);}
else {alert("Refresh failed!")};
}
}
}
self.xmlHttpRequest.send(null);
}
除非这只是一个拼写错误,否则你错过了一个右括号。
//label[contains(text(),'Unsafe to delete']
该xpath应该可以工作。