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



我是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'));
});

选择器的参数是考试中元素的 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 必须包含"某个字符串":

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

最新更新