大家! 我是TestCafe的新手,我需要一些想要实现的帮助。
我有一个React网站,我在这里放置了一个Facebook登录名。通常,当您进入页面并单击Login with facebook
时,会打开一个弹出窗口并正常输入您的凭据。之后,您将被重定向到页面,令牌被保存在localStorage
变量中,供页面稍后使用。
但是,当我运行登录过程测试时,Testcafe而不是打开弹出窗口,而是在同一页面上打开Facebook表单,并且从不重定向到该页面。
此外,我尝试使用dummy token
(还有ClientFunction
)在localstorage上设置一些Roles
,但我的网站永远无法访问该令牌,因为testcafe似乎将此变量放在了名为hammerhead
因此,我的问题是,如何在测试中或手动输入此令牌,以便我的网站可以读取它并进行一些功能?
这是我到目前为止所拥有的。
/* global test, fixture */
import { WelcomePage } from './pages/welcome-page'
import {ClientFunction, Role} from 'testcafe';
const welcomePage = new WelcomePage()
const setLocalStorageItem = ClientFunction((prop, value) => {
localStorage.setItem(prop, value);
});
const facebookAccUser = Role(`https//mypage.net/`, async t => {
await setLocalStorageItem('token', 'my-token');
}, { preserveUrl: true });
fixture`Check certain elements`.page(`https//mypage.net/`)
test('Check element is there', async (t) => {
await t
.navigateTo(`https//mypage.net/`)
.wait(4000)
.useRole(facebookAccUser)
.expect(cetainElementIfLoggedIn)
.eql(certainValue)
.wait(10000)
})
任何帮助将不胜感激
感谢您的时间。
答案 0 :(得分:2)
当前,TestCafe不支持多个浏览器窗口。因此,无法通过Facebook弹出表单登录。 但是,有一种解决方法。请参考以下线程https://github.com/DevExpress/testcafe-hammerhead/issues/1428。
我的工作测试如下:
import { Selector, ClientFunction } from 'testcafe';
const patchAuth = ClientFunction(() => {
window['op' + 'en'] = function (url) {
var iframe = document.createElement('iframe');
iframe.style.position = 'fixed';
iframe.style.left = '200px';
iframe.style.top = '150px';
iframe.style.width = '400px';
iframe.style.height = '300px';
iframe.style['z-index'] = '99999999';
iframe.src = url;
iframe.id = 'auth-iframe';
document.body.appendChild(iframe);
};
});
fixture `fixture`
.page `https://www.soudfa.com/signup`;
test('test', async t => {
await patchAuth();
await t
.click('button.facebook')
.switchToIframe('#auth-iframe')
.typeText('#email', '****')
.typeText('#pass', '****')
.click('#u_0_0')
.wait(30e3);
});
请记住,需要在x-frame-options
模块中使用testcafe-hammerhead
进行操作。
此外,我想提到Testing in Multiple browser windows
是我们的优先任务之一,它是TestCafe Roadmap的一部分