如何使用 nightwatch JS 识别 table 行中动态生成的图像 ID

How to identify dynamically generated image id's in a table row by using nightwatch JS

我有一个 table,因为每一行都有一些信息。在其中一行中,图像是可用的,而且它们是可点击的。我需要单击其中一张具有动态 ID 的图像。

请参考下面的源码

<tr id="tblRow_2">
<td height="25" colspan="8" style="border: none; text-align: right">
<input id="PPPayNow_0" type="image"  src="/Client/images/paynowprepay.gif" onclick="pppayClick(0,35);"/>
<input id="PayNow_0" type="image" src="/Client/images/paynow.gif"  onclick="payClick(0,35);" alt=""/>
</td> 
<td></td>
<td id="paymentTotal_0" style="text-align:right; font-size:medium; font-weight:bold; color:Black; border:none"></td>

我尝试了 CSS 选择器和 x 路径,但没有成功。

假设 onclick 属性值是恒定的 - 毕竟它们是 js 函数,所以应该是,这就是你如何 select 第一个输入:

//td/input[starts-with(@onclick, "pppayClick")]

这是第二次:

//td/input[starts-with(@onclick, "payClick")]

如果只有前缀(_0 部分)发生变化,您可以对 id 属性执行相同的操作。

我通过使用 X-Path 前面的兄弟姐妹和前面的 Axes 的 x-path 字符串函数解决了这个问题,即数字字符串长度(字符串?)它 returns 字符串中的字符数。 number string-length(string?) => 这个函数我用来识别输入标签,点击复选框后将启用。

解决方案是: browser.useXpath().click('//*[@id="tableId"]/tbody/tr/td[3][string-length(text()) > 0]/preceding::td[ 2]/input[开始于(@id, "PayNow")]');