TestCafe:具有动态 ID 的 Web 应用程序(XAF 应用程序)

TestCafe: web application (XAF Application) with dynamic ids

我是 TestCafe 的新用户,我遇到了一个问题:我正在测试的 Web 应用程序包含带有动态 ID 的元素。所以当我 运行 我的测试时,我有一个错误,因为选择器在考试中找不到元素。如何解决这个问题?你能帮助我吗?

    import { Selector } from 'testcafe';

    fixture `test1212`
        .page `192.168.1.26:801/Login.aspx?ReturnUrl=%2f`;

    test('New Test 1', async t => {
        await t
            .typeText(Selector('#Logon_v0_38054418_MainLayoutEdit_xaf_l13_xaf_dviUserName_Edit_I'), 'TMZ\rossimarta')
            .pressKey('tab')
            .typeText(Selector('#Logon_v0_38054418_MainLayoutEdit_xaf_l17_xaf_dviPassword_Edit_I'), 'gipstech02')
            .click(Selector('span').withText('Accedi'));
    });

Selector的参数是exam中元素的id,但是每次访问页面这个id都会改变。所以当我 运行 我的测试时,我有一个错误。

谢谢大家!

解决方案是使用另一个选择器,它不基于 id,但对于正确的元素仍然是唯一的。为了进一步帮助您,您需要提供要测试的表单的 html。你可以这样做:

Selector('form input').withText('Username')

根据您的需要修改它(基于 html 结构)。如果您需要特定的解决方案,则必须提供完整的 html 表格。

编辑: 生成的 id 的结尾是静态的,在这种情况下它是一个输入字段,它的 id 总是以 'dviUserName_Edit_I' 结尾。可以创建一个只检查 id 末尾的选择器:

Selector("input[id$='dviUserName_Edit_I']")

如果开始是静态的,也可以做同样的事情:

Selector("input[id^='dviUserName_Edit_I']")

或者如果id必须包含'some string':

Selector("input[id~="some string"]")