一个 url 上的 Testcafe 测试脚本,然后在另一个 url 上使用 setNativeDialogHandler/navigateTo

如何解决一个 url 上的 Testcafe 测试脚本,然后在另一个 url 上使用 setNativeDialogHandler/navigateTo

所以我的特定测试脚本,我需要在 2 个不同的 url 上运行测试,一个,然后一个。原始/夹具 url 上的第 1 部分效果很好,但在第 2 部分中我有这 3 个测试。

    test('Button Time (based on the cue point) From Brightcove',async t => { //Critical
    const dataVideoIdValue = await Selector('video-js').getAttribute('data-video-id')
    await t
        .setNativeDialogHandler(() => true)
        .navigateto('https://signin.brightcove.com/?redirect=https%3A%2F%2Fstudio.brightcove.com%2Fproducts%2Fvideocloud%2Fmedia%2Fvideos%2F' + dataVideoIdValue)
        .typeText('#email','******')
        .typeText('#password','******')
        .click('#signinButton')
    const brightcoveButtonTimeValue = Selector('.cue-point').withAttribute('data-time').getAttribute('data-time')
    const cuepoint = JSON.stringify(await brightcoveButtonTimeValue);
    const cuepoint2 = cuepoint.match(/\d+/g)
    const cuepoint3 = parseInt(cuepoint2)
    var timestamp = cuepoint3;
    var minutes = Math.floor(timestamp / 60);
    var seconds = timestamp % 60;
    var formatted = minutes.toString().padStart(2,'0') + ':' + seconds.toString().padStart(2,'0');
    console.log('\"brightcoveButtonTimeValue\":"' + formatted + '<br><br><button class=\\"accordion\\">Full Results</button><div class=\\"panel\\"><p>&lt;g class=\\"cue-point\\" data-time=\\"' + await brightcoveButtonTimeValue + '\\"&gt;</p></div>",')
    const brightcoveButtonTime = Selector('.cue-point').withAttribute('data-time')
    await t.expect(brightcoveButtonTime.exists).ok()
});

test('BC Thumbnail Image',async t => { //Major
    const dataVideoIdValue = await Selector('video-js').getAttribute('data-video-id')
    await t
        .setNativeDialogHandler(() => true)
        .navigateto('https://studio.brightcove.com/products/videocloud/media/videos/' + dataVideoIdValue)
    const brightcoveThumbnailValue = Selector('img').withAttribute('alt','Thumbnail').getAttribute('src')
    console.log('\"brightcoveButtonTime\":" ' + await brightcoveThumbnailValue + '<br><br><img width=\\"200\\" src=\\"' + await brightcoveThumbnailValue + '\\"/><br><br><button class=\\"accordion\\">Full Results</button><div class=\\"panel\\"><p>&lt;img src=\\"' + await brightcoveThumbnailValue + '\\"/&gt;</p></div>",')
    const brightcoveThumbnail = Selector('img').withAttribute('alt','Thumbnail')
    await t.expect(brightcoveThumbnail.exists).ok()
});

test('BC Name matches IRIS page name',async t => { //Minor
    const promoVersionNameMatchCheck = (await Selector('script').withText('var promoCookie').innerText).replace(/\"/g,"").replace(/\;/g,"\;<br><br>").split('=').pop().split(';')[0].trim()
    const promoVersionNameFull = (await Selector('script').withText('var promoCookie').innerText).replace(/\"/g,"").replace(/var/g,"<br>var").replace(/\;/g,"\;<br><br>")
    const dataVideoIdValue = await Selector('video-js').getAttribute('data-video-id')
    await t
        .setNativeDialogHandler(() => true)
        .navigateto('https://studio.brightcove.com/products/videocloud/media/videos/' + dataVideoIdValue)
    const brightcoveTitleNameValue = Selector('.DeFinition-classic-1_11_1-1VYT-').withAttribute('data-test-name','video-name').child('.DeFinition-value-1_11_1-DlVkJ').innerText
    console.log('\"brightcoveTitleNameValueText\":"BC Name:        ' + await brightcoveTitleNameValue + '<br>IRIS page name: ' + await promoVersionNameMatchCheck + '<br><br><button class=\\"accordion\\">Full Results</button><div class=\\"panel\\"><p>&lt;div class=\\"DeFinition-value-1_11_1-DlVkJ\\"&gt;' + await brightcoveTitleNameValue + '&lt;/div&gt;<br><br>&lt;script&gt;<br>' + await promoVersionNameFull + '&lt;/script&gt;</p></div>"},')
    const brightcoveTitleName = Selector('.DeFinition-classic-1_11_1-1VYT-').withAttribute('data-test-name','video-name').child('.DeFinition-value-1_11_1-DlVkJ')
    await t.expect(brightcoveTitleName.exists).ok()
    await t.expect(await promoVersionNameMatchCheck).eql(await brightcoveTitleNameValue)
});

因此,当我希望它留在 new/2nd/navigateto url 上时,这 3 个测试正在重新加载回主设备 URL。

我尝试过 Test.page 方法,但它似乎不起作用。 https://devexpress.github.io/testcafe/documentation/reference/test-api/test/page.html

知道为什么这不起作用或如何防止在 2 个 url 之间重新加载吗?我希望它在这三个测试中的第一个之后https://studio.brightcove.com/products/videocloud/media/videos/****。

解决方法

据我所知,您希望在第一次测试中登录,然后在第二次和第三次测试中继续使用您的帐户。

然而,TestCafe 从fixture/test 中定义的页面开始每个测试。这是预期的行为,因为 TestCafe 中的每个单独测试都独立于其他测试。测试不会在它们之间共享 cookie/localStorage/url。

在这种情况下,您需要查看Roles Mechanism。它将允许您在第一次测试中登录一次。之后,TestCafe 可以在第二次测试中恢复页面状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?