1 回答

TA貢獻1818條經驗 獲得超3個贊
對于為什么您沒有將“內部功能”輸入控制臺,我沒有明確的答案,因為在我這邊稍微簡化后它確實起作用了。但我有一些關于如何讓它更清楚的建議 + 我會給你一個工作示例。
頁面對象不應該包含任何應該在測試中的“檢查”邏輯,因為這就是測試的全部內容。所以
checkDesktopTopMenuBarTextLinks()
不應該Header
上課。(它在技術上會起作用,但你遲早會迷失在這個結構中。)await t.expect(await this.topMenuNavItem.withText(navText).exists)
=> 為什么第二個等待?嘗試盡可能地簡化您的選擇器,例如
topMenuNavItem
可能只是Selector('.top-header-menu').find('a');
Json 不能包含評論,這實際上可能是您問題的根源,但我不知道您是否只是在此處為您的問題添加了評論。但
config.json
應該只是一個有效的 json(你可以在這里查看)。您的示例不是有效的 json。如果我將你的 config.json 與評論一起使用,我會得到這個錯誤Unexpected token / in JSON at position 3
。
話雖如此,我簡化了您要執行的操作的示例:
資源/config.json
{
"top_menu_nav": {
"All": "/all/",
"News": "/news/",
"Press Releases": "/press/",
"Rumors": "/rumors/",
"About": "/about/",
"Contact": "/contact/",
"Refurbishments": "/refurbishments/"
}
}
對象/header.js
import { Selector, t } from 'testcafe';
class Header {
constructor() {
this.topMenuNavItem = Selector('.top-header-menu').find('a');
}
}
export default new Header();
測試/menu.js
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('https://wdwthemeparks.com/');
. 這個 URL 可以進入一個真實的配置文件。我會讓測試盡可能簡單和小。這意味著在一個測試中檢查菜單項的名稱并
href
在另一個測試中檢查屬性。也許在這個例子中這不是什么大問題,但在更復雜的例子中,你會喜歡有清晰的小測試來幫助你找出問題所在。
添加回答
舉報