我正面临着一个问题,即找到一行的xpath,该行具有随机生成的元素ID。
<table>
<tbody>
<tr>
<td><a slotId=2>1996</a>
<tr>
<td>
<td><strong>No data to display></strong></td>
<td>
<table id=ct164_Name>
<tbody>
<tr>
<td><span class=Name><input id=text_ct164_name><label id=label_ct164_name>Smith</label></span></td>
</tr>
</tbody>
</table>
</td>
<td>
<input id=text_ct164_Amount class=myamount>
</td>
<td>
<textarea id=area_ct164_comments class=Mycomments>
</td>
<td>
<a id=button_ct164_Status class=2 status available></td>
</tr>
<tr>
<td><a slotId=3>1997</a>
<tr>
<td>
<td><strong>No data to display></strong></td>
<td>
<table id=ct165_Name>
<tbody>
<tr>
<td><span class=Name><input id=text_ct165_name><label id=label_ct165_name>Carters</label></span></td>
</tr>
</tbody>
</table>
</td>
<td>
<input id=text_ct165_Amount class=myamount>
</td>
<td>
<textarea id=area_ct165_comments class=Mycomments>
</td>
<td><a id=button_ct165_Status class=My status>2 status available</a></td>
</tr>
....
....
....
</table>
我能够通过xpath找到包含年份的元素。
//table[contains(@id,"main_uxSlots")][@class="grid"]//tr//td//a[.="1996"]
现在,我想获取年份为1996年的行中的所有元素。SlotID
和ct
值是动态生成的,所以我不能对它们进行硬编码。
表中大约有100-200行,除了年份之外,它们具有相同的类和相似的文本值。有人可以建议一种方法来解决这种情况,并根据年份获得ct
值。一旦我获得ct
值,我就可以获取我想要访问的所有元素的id。
答案 0 :(得分:1)
HTML代码中的一些问题:
请提供正确且格式正确的HTML代码,我们需要相关元素的确切关系来找到您想要的元素。
我粗略猜测了正确的HTML代码,并提供以下代码来解决您的问题:
var util = require('util');
function getId(year) {
var xpathPattern = '//table[contains(@id, "main_uxSlots")][@class="grid"]' +
'/tbody/tr[td/a[.="%s"]]//table';
var xpathExp = util.format(xpathPattern, year);
return element(by.xpath(xpathExp))
.getAttribute('id')
.then(function(id){
return id.split('_')[0];
});
}
function readAmount(year) {
return getId(year).then(function(id){
var cssExp = util.format('input#text_%s_Amount', id);
return element(by.css(cssExp)).getAttribute('value');
});
}
function readComments(year) {
return getId(year).then(function(id){
var cssExp = util.format('textarea#area_%s_comments', id);
return element(by.css(cssExp)).getAttribute('value');
});
}
答案 1 :(得分:0)
//a[.="1996"]/../..
这个xpath将为你提供1996年的所有行。现在只需迭代这些行,查找你正在寻找的任何特定元素。