【问题标题】:How to resolve missing characters bug in Cypress type() command?如何解决 Cypress type() 命令中缺少字符的错误?
【发布时间】:2021-05-21 06:27:59
【问题描述】:

我在输入 select2 元素的搜索字段时遇到问题。在某些测试中,执行 type() 命令时随机字符丢失。我尝试在开始输入之前等待(),并在每个字符之后输入超时,但没有任何帮助。所以我实现的绕过是将字符串作为一个整体放入字段中,而不是逐个字符地键入它:

this.getSelect2Input().invoke('val', str).trigger('change')

但是在这种情况下测试不理解字符串已经被输入并继续等待输入。所以解决办法是在字符串末尾加一个空格:

this.getSelect2Input().invoke('val', str).trigger('change').type(' ');

它有效,但不适用于所有测试,因为在某些情况下,空格被视为附加字符并且无法找到字符串。对于这种情况,我找不到其他任何东西,然后输入一个空格并删除它(我知道这不是好的解决方案,但我能做什么?):

this.getSelect2Input().invoke('val', str).trigger('change').type(' {backspace}');

但现在这并不奏效,在某些情况下,空间被打印但没有被删除。有人可以建议在设置字段值后如何启动 select2 搜索吗? type({'enter'}) 也不行。

【问题讨论】:

  • this.getSelect2Input() 返回什么?
  • 嗨,@AlapanDas 这只是一个页面对象方法 getSelect2Input() {return cy.get([element selector here])} 你可以把它想象成一个通用的 cy.get() 方法。关于您的回答:如您所见,在我的问题中,我提到我尝试了您推荐的解决方案,但没有奏效。
  • 您是否使用了delaytimeout 后跟should。问题中没有提到?
  • 不,我只使用了没有应该的延迟,并在开始输入之前等待。为什么我需要使用应该?你的意思是如果断言失败,测试会重复输入吗?
  • .using 应该会让 cypress 重试,直到您输入的值与输入的值匹配。

标签: cypress


【解决方案1】:

如果this.getSelect2Input() 转换为cy.get('locator'),您可以添加delaytype(),还可以添加.should 以确保您输入的预期值输入正确。

// Delay each keypress by 0.1 sec
this.getSelect2Input().type('slow.typing@email.com', {
    delay: 100
}).should('have.value', 'slow.typing@email.com')

或者,您也可以添加timeout

// Add a timeout of 10 seconds
this.getSelect2Input().type('slow.typing@email.com', {
    timeout: 10000
}).should('have.value', 'slow.typing@email.com')

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 2021-12-31
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2010-09-23
    • 2021-02-12
    相关资源
    最近更新 更多