Nightwatch.js 通过 CSS 选择器查找的问题(最新版本)

Issues with Nightwatch.js finding via CSS selector (latest version)

我调查了 与 CSS select 的问题。接受的答案是完全远离 nightwatch.js。我希望情况并非如此,但我遇到了问题。

我已经升级到最新的 nightwatch.js v0.9.14,但无法在屏幕上找到我可以使用 jQuery.

找到的元素

使用 select 或以下(层次结构是必要的,因为它在 jqGrid 中):

.click("#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(4) > select")

我得到:

ERROR: Unable to locate element: "#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(4) > select
 using: css selector

还尝试了 this question 中的 selector 方法(不希望这样做,因为 ID 是动态的):

 .click('select[id="null_z01rsnload_inst_ref"]')

失败:

ERROR: Unable to locate element: "select[id="null_z01rsnload_inst_ref"]" using: css selector

在控制台中使用 jQuery:

$("#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(4) > select")

Returns:

[select#null_z01rsnload_inst_ref.editable, prevObject: init(1), context: document, selector: "#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(4) > select"]

我以前遇到过类似的问题(特别是 select 及其选项)but the method mentioned in the answer by 79E09796 has worked for me previously

这是在 Chrome(我们的主要目标,我们目前不对其他平台进行自动化测试)上使用 chromedriver.exe 2.28 版。它不在 iframe 中。

在 nightwatch 命令行中添加“--verbose”给了我:

INFO Request: POST /wd/hub/session/50a51b48-bce9-425d-a132-2d0407c8ac21/elements
 - data:  {"using":"css selector","value":"#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(7) select"}
 - headers:  {"Content-Type":"application/json; charset=utf-8","Content-Length":98}
ERROR Response 500 POST /wd/hub/session/50a51b48-bce9-425d-a132-2d0407c8ac21/elements (1019ms) { sessionId: '50a51b48-bce9-425d-a132-2d0407c8ac21',
  status: 32,
  value:
   { message: 'invalid selector: An invalid or illegal selector was specified\n
..<snip>..

任何进一步的想法将不胜感激!

正如@BoltClock 所说,eq() 运算符不是有效的 CSS 选择器,它是 jQuery 特定的。我改为使用 nth-child()

所以:

.assert.elementPresent("#MedicalHistoryAmendment_sheet tbody tr:eq(1) > td:eq(7) select")

需要:

.assert.elementPresent("#MedicalHistoryAmendment_sheet tbody tr:nth-child(2) > td:nth-child(8) select")

要更改,您需要将索引增加 1,同时请记住它可能会获取额外的元素 depending on the structure

此类别中仅 jQuery 的其他选择器是 gt()lt()

感谢大家的帮助。