【问题标题】:How to wait for full name to enter in a text box in protractor如何等待全名在量角器的文本框中输入
【发布时间】:2019-06-03 10:33:21
【问题描述】:

我正在使用发送键在文本框中输入文本,但它没有等待文本完全输入并单击下一步按钮,因此文本没有完整写入。如何解决这个问题?

我通过使用日期函数输入随机名称并在此之前附加一个常数,如图所示。现在,当它通过 sendkeys 进入时,第一次像 a45 一样完全输入,但第二次像 a 一样输入并单击下一步按钮,因此测试用例失败。

如何等待量角器让文字写完?

var text = 'a' + date.getHours(); + date.getMinutes();

element.sendKeys(text);
element.click();

预期结果:a345

实际:一个

在这种情况下有人可以帮助我并告诉我如何让量角器等待文本完全写入然后单击下一步按钮吗?

【问题讨论】:

  • 嘿。您是刚开始为应用程序编写自动化脚本,还是继续使用现有项目?有两种方法可以解决您的问题,解决方案将取决于您对我的问题的回答

标签: automation protractor automated-tests ui-automation


【解决方案1】:

把它写成异步/等待。设置browser.sleep 只会增加测试时间,而不知道值是否正确。您可以使用 browser.wait 代替,它将轮询条件是否为真或超时(在本例中为 5 秒)。我们要满足的条件是 value 属性是否等于文本。

注意:我将element 更改为someButtonsomeTextBox,因为它指的是全局对象。

const text = 'a' + date.getHours(); + date.getMinutes();

// send the text    
await someTextBox.sendKeys(text);

// poll for a condition to be true or to timeout of 5 seconds
await browser.wait(async () => {
  // keep checking until the value attribute reflects the entered keys
  return (await someTextBox.getAttribute('value')) === text ;
}, 5000);  

await someButton.click();

【讨论】:

    【解决方案2】:
    var date = new Date();
    var msg ='a' + date.getHours() + date.getMinutes();
    
    await element.sendKeys(await msg);
    await elemnet.click();
    

    尝试使用异步/等待。参考https://github.com/angular/protractor/blob/master/docs/async-await.md

    希望以上输入对您有所帮助。

    从您的代码中的date.getHours(); 中删除;,以获得您的期望。

    【讨论】:

      【解决方案3】:

      试试这个

      var date = new Date();
      var hour = date.getHours();
      var min = date.getMinutes();
      var text = 'a' + hour + min;
      

      然后等待元素被插入

      browser.driver.sleep(500);
      element.sendKeys(text);
      element.click();
      

      【讨论】:

      • 这里的超时并不理想。也许使用 browser.wait
      【解决方案4】:

      您需要在您的操作中添加等待,以便等待承诺完成。

      您还可以在等待发送密钥完成的自定义发送密钥方法的末尾添加一个检查。

      await elem.clear();
      await elem.sendKeys(keys);
      return (await elem.getAttribute('value')) === keys;
      

      【讨论】:

      • 留下一些可能是正确的代码行而没有任何解释是很奇怪的。请包括代码应该做什么的相关描述。
      • @KamilCuk 我通常同意,但这里很清楚,我不确定我可以添加什么更具描述性。无论如何我都会更新我的答案。
      【解决方案5】:

      您已经在这里找到了一些很好的答案,但是如果它们不起作用,那么在以前的项目中帮助我的一件事就是拆分字符串并逐个字符地输入。

      text.split('').forEach(char => {
        element.sendKey(char);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多