Javascript 如何确定如何将网站导航文本/链接与配置进行比较
我正在尝试使用TestCafe/JavaScript创建一个测试,该测试将网站的顶部菜单文本/链接与存储在配置中的预期数据进行比较。我有一些使用TestCafe的经验,但仍在学习 当我设置函数并调用它时,我输入了函数,但没有输入其中的循环,正如FOR循环内部的console.log没有打印到控制台所证明的那样。我调试这个已经有一段时间了,但无法理解 网址: 配置文件(位于项目中的./Config/default.json5) 选择器和相关函数(位于项目中的./page objects/header.js) 测试文件(位于项目中的./tests/header.js;文件中的其他行注释掉,只是因为想要测试函数)Javascript 如何确定如何将网站导航文本/链接与配置进行比较,javascript,testing,automated-tests,e2e-testing,testcafe,Javascript,Testing,Automated Tests,E2e Testing,Testcafe,我正在尝试使用TestCafe/JavaScript创建一个测试,该测试将网站的顶部菜单文本/链接与存储在配置中的预期数据进行比较。我有一些使用TestCafe的经验,但仍在学习 当我设置函数并调用它时,我输入了函数,但没有输入其中的循环,正如FOR循环内部的console.log没有打印到控制台所证明的那样。我调试这个已经有一段时间了,但无法理解 网址: 配置文件(位于项目中的./Config/default.json5) 选择器和相关函数(位于项目中的./page objects/heade
因此,我想再次测试前端是否显示文本,以及顶部菜单中每个项目的href值是否正确。这些期望值存储在配置文件中。我不清楚为什么不将“内部函数”放入控制台,因为在我方面稍微简化后,它确实起作用了。但是我有一些关于如何让它更清晰的建议,我将给你一个工作示例
checkDeskTopMenuBartextLinks()
不应在标题中。(这在技术上是可行的,但你很快就会迷失在这个结构中,或者更晚。)
wait t.expect(wait this.topmenunnaItem.withText(navText).exists)
=>第二个等待的原因是什么topMenuNavItem
可能只是选择器('.top header menu')。查找('a')代码>
config.json
应该只是一个有效的json(您可以检查它)。您的示例不是有效的json。如果我将config.json与注释一起使用,我将在json的位置3处获得此错误意外标记/
{
"top_menu_nav": {
"All": "/all/",
"News": "/news/",
"Press Releases": "/press/",
"Rumors": "/rumors/",
"About": "/about/",
"Contact": "/contact/",
"Refurbishments": "/refurbishments/"
}
}
Objects/header.js
import { Selector, t } from 'testcafe';
class Header {
constructor() {
this.topMenuNavItem = Selector('.top-header-menu').find('a');
}
}
export default new Header();
import { Selector } from 'testcafe';
import config from '../config';
import Header from '../Objects/header';
const testData = require('../Resources/config.json');
fixture `Check Menu`
.page('https://wdwthemeparks.com/');
test
('Check Menu Items', async t => {
for (let navText in testData.top_menu_nav) {
await t.expect(Header.topMenuNavItem.withText(navText).exists).ok();
}
});
测试/menu.js
import { Selector, t } from 'testcafe';
class Header {
constructor() {
this.topMenuNavItem = Selector('.top-header-menu').find('a');
}
}
export default new Header();
import { Selector } from 'testcafe';
import config from '../config';
import Header from '../Objects/header';
const testData = require('../Resources/config.json');
fixture `Check Menu`
.page('https://wdwthemeparks.com/');
test
('Check Menu Items', async t => {
for (let navText in testData.top_menu_nav) {
await t.expect(Header.topMenuNavItem.withText(navText).exists).ok();
}
});
执行此操作时,测试将成功运行:
可能的进一步改进:
- 命名约定:我可能会将
重命名为其他名称。在我看来,它不是一个真正的配置文件,因为它包含用于检查的值config.json
- 我将遵循官方文件中提到的页面对象结构
- 在
.page('s)中,我会使用一个变量而不是硬编码的URLhttps://wdwthemeparks.com/');代码>。此URL可以进入真实的配置文件
- 我会让测试尽可能简单和小。这意味着在一个测试中检查菜单项的名称,在另一个测试中检查
属性。在本例中,这可能不是什么大问题,但在更复杂的示例中,您会喜欢使用清晰的小测试来帮助您了解问题所在href
checkDeskTopMenuBartextLinks()
不应在标题中。(这在技术上是可行的,但你很快就会迷失在这个结构中,或者更晚。)
wait t.expect(wait this.topmenunnaItem.withText(navText).exists)
=>第二个等待的原因是什么topMenuNavItem
可能只是选择器('.top header menu')。查找('a')代码>
config.json
应该只是一个有效的json(您可以检查它)。您的示例不是有效的json。如果我将config.json与注释一起使用,我将在json的位置3处获得此错误意外标记/
{
"top_menu_nav": {
"All": "/all/",
"News": "/news/",
"Press Releases": "/press/",
"Rumors": "/rumors/",
"About": "/about/",
"Contact": "/contact/",
"Refurbishments": "/refurbishments/"
}
}
Objects/header.js
import { Selector, t } from 'testcafe';
class Header {
constructor() {
this.topMenuNavItem = Selector('.top-header-menu').find('a');
}
}
export default new Header();
import { Selector } from 'testcafe';
import config from '../config';
import Header from '../Objects/header';
const testData = require('../Resources/config.json');
fixture `Check Menu`
.page('https://wdwthemeparks.com/');
test
('Check Menu Items', async t => {
for (let navText in testData.top_menu_nav) {
await t.expect(Header.topMenuNavItem.withText(navText).exists).ok();
}
});
测试/menu.js
import { Selector, t } from 'testcafe';
class Header {
constructor() {
this.topMenuNavItem = Selector('.top-header-menu').find('a');
}
}
export default new Header();
import { Selector } from 'testcafe';
import config from '../config';
import Header from '../Objects/header';
const testData = require('../Resources/config.json');
fixture `Check Menu`
.page('https://wdwthemeparks.com/');
test
('Check Menu Items', async t => {
for (let navText in testData.top_menu_nav) {
await t.expect(Header.topMenuNavItem.withText(navText).exists).ok();
}
});
执行此操作时,测试将成功运行:
可能的进一步改进:
- 命名约定:我可能会将
重命名为其他名称。在我看来,它不是一个真正的配置文件,因为它包含用于检查的值config.json
- 我将遵循官方文件中提到的页面对象结构
- 在
.page('s)中,我会使用一个变量而不是硬编码的URLhttps://wdwthemeparks.com/');代码>。此URL可以进入真实的配置文件
- 我会让测试尽可能简单和小。这意味着在一个测试中检查菜单项的名称,在另一个测试中检查
属性。在本例中,这可能不是什么大问题,但在更复杂的示例中,您会喜欢使用清晰的小测试来帮助您了解问题所在href