首页 > 解决方案 > 如何使用具有异步/等待功能的守夜人?

问题描述

我正在使用 nightwatch 测试框架来测试 的某些功能,<input />但它在比赛问题上失败了。

我需要测试什么

  1. 向输入文本添加一个值:xxxx.
  2. backspace4 次。
  3. 断言input具有价值''

但我知道它的input价值是xx

错误Expected element <#inputElement> to have value equal: "" - expected "equal ''" but got: "xx"

    "type 4 chars and use backspace to clear the input": browser => {
    searchBox.waitForElementVisible("@input")
    .click("@input")
    .setValue("@input",'xxxx');
    for (let i = 0; i < 4; i++) {
        await browser.keys(browser.Keys.BACK_SPACE);
    }
    searchbox.expect.element("@input").value.to.equal("");

    searchbox.click("@input");
 searchbox.expect.element("@input").value.to.equal("");
 browser.end(); 
},

这导致了结论,即 for 循环在input清除之前执行,然后前进到断言。我尝试了相同的测试,async/await但我再次遇到相同的错误。我想念什么吗?

我用 async/await 测试它,如下所示:

    "type 4 chars and use backspace to clear the input": async browser => {
    searchBox.waitForElementVisible("@input")
    .click("@input")
    .setValue("@input",'xxxx');
    for (let i = 0; i < 4; i++) {
        await browser.keys(browser.Keys.BACK_SPACE);
    }

    await searchbox.click("@input");
    await searchbox.expect.element("@input").value.to.equal("");
    await browser.end(); 
},

欢迎任何帮助。

标签: javascriptreactjsunit-testingtestingnightwatch.js

解决方案


你不需要await第一行代码吗?

await searchBox.waitForElementVisible("@input")
.click("@input")
.setValue("@input",'xxxx');

我认为它与正在输入的字符并行退格四次,其中两个是在发送最后一个退格后输入的。


推荐阅读