nightwatch useXpath 使用后无法设置值

After nightwatch useXpath use cannot setValue

我的守夜人来自 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 元素。

如能就此问题提供任何帮助,我们将不胜感激。

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

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');

您需要使用 .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')