【问题标题】:Playwright C# - wait for input text to be emptyPlaywright C# - 等待输入文本为空
【发布时间】:2021-11-09 07:50:19
【问题描述】:

我正在使用带有 C# 绑定的 Playwright 编写测试,但遇到了等待元素输入没有文本的问题。 在“添加”操作之前,输入字段如下所示:

文章编号输入具有 id="Number",并且名称具有 id="Name" - 只是为了清楚起见。 “添加”操作后,输入字段中的文本将被清除:

从输入中清除文本只是一瞬间的问题,但 Playwright 不会等待它,而是在清除输入之前开始输入,这会打乱我的测试。

我试过用:

await page.WaitForSelectorAsync("#Number >> text=");
await page.WaitForSelectorAsync("#Name>> text=");

但这并没有帮助。 如何等待文本为空?

【问题讨论】:

    标签: c# .net playwright


    【解决方案1】:

    我认为您的选择器要求 Playwright 查找没有文本的元素。输入元素将其内容存储在其 Value 属性中,因此实际上始终没有文本!

    您可以使用this 方法根据页面对象检查输入元素值,或使用this 方法根据IElementHandle。 也许有一个实用方法,例如:

    string inputValue = "input";
    DateTime timeout = DateTime.Now.AddSeconds(5);
    while(timeout > DateTime.Now && !string.IsNullOrEmpty(inputValue)){
       inputValue = await page.InputValueAsync("#Number");
    }
    

    这将等待输入元素有一个空值。

    有一些注意事项:Text= 会检查按钮和提交类型的 Input 元素的值属性,如 here 所述。

    【讨论】:

      【解决方案2】:

      以防万一其他人正在寻找相同问题的答案,Page.WaitForFunctionAsync(expression, arg, options) 看起来是等待元素为空的理想方式。与前面提到的解决方案相比,它的好处是它需要更少的代码,等待不忙,客户端和浏览器之间的通信更少,因为轮询(直到准备好或超时)发生在浏览器本身内部。

      您可以将 JavaScript 表达式(将在浏览器中执行)传递给它,例如 textBox => textBox.value == '' 在第二个参数中,您可以将文本框的元素句柄传递给它。

      (我自己没有尝试过,因为我通常将 PlayWright 与 NodeJS 一起使用,但我认为有了这些提示,你会走得很远。)

      【讨论】:

        猜你喜欢
        • 2016-06-26
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        相关资源
        最近更新 更多