是否有任何可能的原因让
await t.expect(Selector().exists).ok()
抛出TypeError: Cannot read property '0' of null
?它偶尔发生,所以很难追踪,但我的理解是,如果选择器不存在于 DOM 树中,那么它应该等待超时,并抛出一个预期的布尔值,如果未找到错误,则为布尔值。我知道我没有提供太多内容,但我无法在面向生产的网站上重现该问题。任何帮助将不胜感激。
编辑:这是 TestCafe 1.18.3 版本上的情况,但我不确定其他版本是否也会发生。
如果没有测试代码示例,很难找到问题的原因。您能否在每个潜在问题的地方之前插入具有较长超时时间的 t.wait 方法,例如
await t.expect(Selector().exists).ok()
?
然后,观察测试如何通过,看看问题是否取决于超时。
请注意Selector Timeout中的以下信息:
选择器超时对 Selector.exists 和 Selector.count 没有影响 特性。无论什么,这些属性都会立即评估 暂停。要对存在应用超时并对断言进行计数,请传递 断言方法(expect.ok、expect.eql 等)超时。 如果问题取决于超时,请分享一个重现问题的小测试代码片段。
如果问题与超时无关地重现,则意味着问题出在代码的另一部分。
虽然我没有发现失败的根本原因,但将expect方法包装在重试中已经完全消除了错误。如果我获得有关原始问题的任何其他信息,我将更新此主题。