protractor - 如何使用 Protractor 正确通过 reCaptcha 系统
问题描述
为了验证包含 reCaptcha 的应用程序,我编写了一个简单的函数,如下所示:
it('And I validate the captcha.', function () {
registration.clickOnCaptcha();
});
clickOnCaptcha() 看起来像这样:
this.clickOnCaptcha = function() {
// Switch to the iFrame where the captcha is
browser.driver.switchTo().frame(0);
// Disable waitForAngular since the iFrame is not in Angular
browser.waitForAngularEnabled(false);
browser.element(by.id('recaptcha-anchor')).click();
// Dirty way to allow Captcha animation to finish
browser.sleep('3000');
// Enable waitForAngular before going back to the main frame
browser.waitForAngularEnabled(true);
// Switch back to the main frame
browser.switchTo().defaultContent();
};
我想知道你们中的一些人是否找到了更好的方法来做到这一点?
此外,我想知道禁用 waitForAngular 功能的最佳方法是在切换到 iFrame之前还是之后执行它。
非常感谢。
解决方案
这是我用于 reCaptcha 的代码
let recaptcha = $(iframeString); //String is previously built depending on page I am on
await browser.wait(until.visibilityOf(recaptcha),browser.params.longWait);
await util.scrollTo(recaptcha); //Sometime reCaptcha is out of view. This function brings it into view
let elem = await browser.driver.findElement(by.css(iframeString));
await browser.waitForAngularEnabled(false);
await browser.switchTo().frame(elem);
await $('#recaptcha-anchor').click();
await browser.switchTo().defaultContent();
await browser.waitForAngularEnabled(true);
await browser.sleep(1500); // Waiting for the reCAPTCHA to load
这与您执行此操作的方式非常相似。我建议切换到特定的 reCaptcha 框架而不是 frame(0),但这是我能看到的最大改进。
推荐阅读
- javascript - 响应标头中的 set-cookies 未在 Vue 应用程序中设置
- python - win32ui.CreateBitmap() 从我希望它捕获的窗口后面抓取屏幕元素
- python - 如何在 Selenium 脚本中让 cookie 永远活着?
- raspberry-pi - 将 Discord Web App 设置为在 Raspbian 10 Buster 中启动时运行
- android - 单元测试 ViewModel + Coroutine + LiveData
- firebase-storage - 如何在我的存储选项卡中下载 js 文件?
- machine-learning - 为什么这个神经网络在 MNIST 上表现不佳?
- haskell - 在 Haskell 中显示用于打印列表的问题
- coinbase-api - Coinbase Websocket 频道匹配与股票行情
- r - 如何使用 wilcoxon 秩和检验找出哪个中位数更大?