夜班后使用Xpath使用不能setValue

时间:2018-02-20 14:31:36

标签: javascript nightwatch.js

我的夜班表来自vue-cli webpack模板。 我的问题是在使用xpath nightwatch后丢失上下文并找不到存在的元素。

示例(有效):

client.setValue('#NameInput', 'FirstName');
client.setValue('#MiddleNameInput', 'MiddleName');
client.setValue('#LastNameInput', 'LastName');
client.setValue('#AnswerInput', 'ChallengeAnswer');
client.useXpath().click("//option[contains(text(), 'Driver License')]");

示例(不起作用):

client.setValue('#NameInput', 'FirstName');
client.setValue('#MiddleNameInput', 'MiddleName');
client.setValue('#LastNameInput', 'LastName');
client.useXpath().click("//option[contains(text(), 'Driver License')]");
client.setValue('#AnswerInput', 'ChallengeAnswer');

找不到#AnswerInput元素。

对此问题的任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

Nightwatch正在寻找#AnswerInput,好像它是一个xpath选择器。在.useXpath()之后,您必须切换回使用带.useCss()的CSS。

client.setValue('#NameInput', 'FirstName');
client.setValue('#MiddleNameInput', 'MiddleName');
client.setValue('#LastNameInput', 'LastName');
client.useXpath().click("//option[contains(text(), 'Driver License')]");
client.useCss().setValue('#AnswerInput', 'ChallengeAnswer');

答案 1 :(得分:0)

您需要使用.useCss()命令将选择器的定位策略设置回 css选择器。 Nightwatch默认使用css选择器。

client.setValue('#NameInput', 'FirstName');
client.setValue('#MiddleNameInput', 'MiddleName');
client.setValue('#LastNameInput', 'LastName');
client.useXpath().click("//option[contains(text(), 'Driver License')]").useCss();
client.setValue('#AnswerInput', 'ChallengeAnswer');

为了帮助解决使用哪种定位策略的问题,我通常会将这些命令单独放在一行。

client
    .setValue('#NameInput', 'FirstName')
    .setValue('#MiddleNameInput', 'MiddleName')
    .setValue('#LastNameInput', 'LastName')
    .useXpath()
    .click("//option[contains(text(), 'Driver License')]")
    .useCss()
    .setValue('#AnswerInput', 'ChallengeAnswer')