Selenium 用于随机生成元素id的xpath
我面临的一个问题是如何定位一行的xpath,该行的元素id是随机生成的Selenium 用于随机生成元素id的xpath,selenium,protractor,Selenium,Protractor,我面临的一个问题是如何定位一行的xpath,该行的元素id是随机生成的 <table> <tbody> <tr> <td><a slotId=2>1996</a> <tr> <td> <td><strong>No
<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>
1996
无数据显示>
史密斯
1997
无数据显示>
卡特尔
2状态可用
....
....
....
我能够通过xpath找到包含年份的元素。
//表[包含(@id,“main_xslots”)][@class=“grid”]///tr//td//a[.=“1996”]
现在,我想获取行中的所有元素,其中年份是1996年SlotID
和ct
值是动态生成的,所以我不能硬编码它们
表中大约有100-200行具有相同的类别和类似的文本值,但年份除外。有人能建议一种解决这种情况的方法,并根据年份获得
ct
值吗。一旦我得到ct
值,我就可以获取我想要访问的所有元素的id。似乎所有的年份都将是一个链接。那为什么不往上走呢
//a[.="1996"]/../..
这个xpath将为您提供1996年的所有行。现在,只需在这些行中迭代寻找任何单独的元素 HTML代码中的一些问题:
- A、TEATAREA的闭合标签缺失
- TR出现在错误的地方
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');
});
}
能否将
HTML
更新为格式化文本以进行快速分析?您所指的ct
值到底是什么<代码>表格id,输入id
,标签id
,文本区域id
,a id
都有ct
值。是的,所有id都有ct
值,这就是为什么我想捕获ct值一次,以便使用它来获取其他元素的原因。例如。textarea的id为area\u ct164\u comments',输入id为text\u ct165\u Amount',第一行和第二行的id为ct165
,第三行的id为ct166
,等等。。我想捕获文本为1996的行的ct
值。我尝试了此操作,但问题是我无法将输入和文本区域与行区分开来。谢谢。这种方法用于获取元素的id。