如何解决在自定义帮助程序中使用`within`
我正在使用CodeceptJS,并且尝试编写一个声明文本并单击“确定”的custom helper。该对话框以iframe模式弹出,表示同意使用cookie。
如果我在方案中写了以下步骤
I.amOnPage('/some-path');
within({frame: '#iframeID'},() => {
I.see('Headline text for dialog');
I.click('OK');
});
// ...
...我的测试似乎正常。
但是当我用它做一个自定义帮助程序并正确配置它以便可以使用时:
const { Helper } = codeceptjs;
class CookieConsent extends Helper {
consentWithCookies() {
const { Puppeteer } = this.helpers;
within({frame: '#iframeID'},() => {
Puppeteer.see('Headline text for dialog');
Puppeteer.click('OK');
});
}
}
module.exports = CookieConsent;
...并将其用作步骤:
I.amOnPage('/some-path');
I.consentWithCookies();
// ...
...它似乎不起作用,因为同意对话框没有像在场景中直接实现时那样被点击。根据某些console.log()
的调试,完全不会调用内部回调。控制台不会引发有关未定义的within
或任何可疑内容的错误。
我怀疑在自定义帮助程序中使用within
无效,或者我做错了一些无法从文档中找出的错误信息。
documentation处的此警告并不能真正弄清内部使用不正确的时间,而使用await
也无济于事。
如果使用不正确,可能会引起问题。如果您看到测试的怪异行为,请尝试将其重构为不在内部使用。建议尽可能在最简单的情况下使用。由于内部返回一个Promise,因此即使您不打算使用返回值,也可能有必要等待结果。
解决方法
如果没有自动化,iFrame的工作可能会很痛苦。有很多因素会导致iFrame无法访问框架,例如跨域iFrame,通常用于提高所提供内容的安全性。
现在要解决您的问题,您所要做的就是在CodeceptJS中使用switchTo()
-Docs,此功能可用于所有可用的助手。订单应该是
I.switchTo('your iframe');
..... some actions here;
I.switchTo(); // You do this so that you get out of the iFrame context when done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。