我有一个场景,单击一个按钮会打开一个新标签,但是当我尝试使用testCafe时,它会在一个新窗口中而不是新标签中打开。这是为什么? testCafe不支持新的标签方案吗?
答案 0 :(得分:3)
我认为并没有必要使用多个标签。通常人们会尝试测试链接是否在新标签页中打开,但是为什么?
<a class="c-cookie-bar__text-link" target="_blank" href="/private-data-info">More information</a>
您知道带有target="_blank"
的链接将在新标签中打开。这不是您的团队要编程的内容,这就是浏览器的工作方式。如果每种可想象的浏览器在链接中遇到此属性,其行为都会相同。它已经过测试,您无需在网站上对其进行重新测试。
但是,您仍然可能需要测试目标内容是否已加载或链接是否符合您的期望。可以,但是您不需要多个选项卡。以下情况是有道理的:
target="_blank"
属性:test
('Check Target Attr', async t => {
await t
.expect(Selector('.c-cookie-bar__text-link').withAttribute('target', '_blank').exists)
.ok();
});
test
('Check Href Attr', async t => {
await t
.expect(Selector('.c-cookie-bar__text-link').getAttribute('href'))
.eql('/private-data-info');
});
import getBaseUrl from '../Helpers/baseUrl';
import { Selector } from 'testcafe';
const baseUrl = getBaseUrl();
fixture `Link Handling`
.page(baseUrl);
test
('Go To Resource', async t => {
const resource = await Selector('.c-cookie-bar__text-link')
.getAttribute('href');
await t
.navigateTo(baseUrl + resource);
// possibly some other assertions follow
});
import getBaseUrl from '../Helpers/baseUrl';
import { Selector } from 'testcafe';
import request from '../Helpers/networkRequest';
const baseUrl = getBaseUrl();
fixture `Link Handling`
.page(baseUrl);
test
('Check Status Code', async t => {
const resource = await Selector('.c-cookie-bar__text-link')
.getAttribute('href');
const networkReq = await request({
method: 'GET',
url: baseUrl + resource
});
await t
.expect(networkReq.status).eql(200);
});
如果您实际上忽略了所有这些,只需单击TestCafe中的链接:
await t
.click(Selector('.c-cookie-bar__text-link'));
它将在新窗口中打开,如下所示: