如何使用 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")]');
我有一个 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")]');