我在这里读过多篇关于读取表数据的文章,然而,每篇文章都是关于如何在单个测试函数中读取和使用这些数据。如何在中读取表,并在测试规范中的任何测试函数中使用它?
如果我把它写进一个测试函数,它会工作,并正确地返回所有信息:
import { sAdmin } from "..authentication";
import TablePage from "../TablePage";
const tablePage = new TablePage();
fixture `A fixture`
.page`https://subdomain.example.com/#/table`
.beforeEach( async t => {
await t
.resizeWindow(1284, 722)
.useRole(sAdmin);
});
// this will work, but this won't share context with any other test function in the spec
// this should be initialized at the start to be able to verify search clears
test(`A test`, async t => {
const tableColumn = await tablePage.woNumber;
const tableCount = await tablePage.woNumber.count;
const cellData = [];
for (let i = 0; i < tableCount; i++) {
const text = await tableColumn.nth(i).innerText;
cellData.push(text);
}
console.log('in spec - tableCount', tableCount);
console.log('in spec - cellData', cellData);
});
两个控制台日志的输出都是正确的:
in spec - tableCount 4
in spec - cellData [ '0007', '0003', '0005', '0006' ]
我在测试规范和页面对象模型(POM)中尝试了一个异步函数。异步函数在我的规范中不起作用,除非它在测试函数中。POM中的一个可以工作,它将被调用,但是我不能执行const tableCount=wait tablePage.woNumber.count
它会对我大叫,我不能使用这样的选择器。这是因为修饰符。计数。我将.count调整为在for循环中,但这只是返回了未定义的数据或其他没有帮助的数据。
我的页面对象模型中的异步函数示例(TablePage)
async rowCount() {
const tableColumn = await tablePage.fooSelector;
const tableCount = await tablePage.fooSelector;
const cellData = [];
for (let i = 0; i < tableCount.count; i++) {
const text = await tableColumn.nth(i).innerText;
cellData.push(text);
}
console.log('in page - tableColumn', tableColumn);
console.log('in page - tableCount', tableCount);
console.log('in page - cellData', cellData);
return tableCount;
};
在我的spec文件中使用此函数调用它,但不确定在何处调用它:
const count = tablePage.rowCount();
我需要在页面加载后运行它来获取单元格数据,并允许我至少在这个规范文件中的所有测试中共享上下文。我更愿意把它放在我的POM中,这样它就可以在其他测试中使用。但是我可以接受它在我的测试规范中工作,而不在测试函数中,这样它就可以在规范文件中的所有测试中共享。
我试着做一个fixture上下文,但也有问题,返回了未定义的结果。这是一个我尝试过的前一个上下文,但不起作用。
.before( async ctx => {
const tableColumn = await tablePage.fooSelector;
const tableCount = await tablePage.fooSelector;
for (let i = 0; i < tableCount.count; i++) {
const text = await tableColumn.nth(i).innerText;
ctx.cellData.push(text);
}
// console.log('in spec - tableCount', tableCount);
// console.log('in in spec - cellData', cellData);
})
这些控制台日志返回未定义的或对象,而不是文本。
任何帮助将不胜感激。以下是我已经引用的资源:
TestCafe-在变量中存储选择器的结果
如何使用testCafe获取表的所有单元格的文本
Testcafe从元素获取文本
https://testcafe.io/documentation/402670/reference/test-api/domnodestate
编辑:我仍然在寻找一种方法来共享我获得的数据的上下文,我无法将数据返回到测试规范。也许如果我做更多的修补,我可以共享我获得的值。
这是我的解决方案,它不共享上下文,但它确实让我防止代码在每个测试函数中重用。
页面对象模型
import { Selector, t } from "testcafe";
class TablePage{
constructor() {
this.searchInput = Selector('#searchInput');
this.tableCount = Selector('.class-selector');
};
async validateSearchResults(selector, searchText) {
await t
.typeText(this.searchInput, searchText)
.pressKey('enter');
const rowCount = await this.tableCount.count;
let searchResults = []
for (let i = 0; i < rowCount; i++) {
let text = await selector.nth(i).innerText;
searchResults.push(text);
await t.expect(searchResults[i]).contains(searchText);
}
};
}
export default TablePage;
规格文件
import { sAdmin } from "..authentication";
import TablePage from "../TablePage";
const tablePage = new TablePage();
fixture `Test search functionality`
.page`https://examplepage.com`
.beforeEach( async t => {
await t
.useRole(sAdmin)
});
test(`User can search via order number`, async t => {
await tablePage.validateSearchResults(tablePage.tableCount, 'foo');
});
const tableCount=wait tablePage.selector.count;
看起来正确,应该可以工作。另外,有必要调用带有wait
关键字的async方法:
const count=wait tablePage.rowCount()
下面是一个类似方法的示例:
table-page.js:
import { Selector } from 'testcafe';
export class TablePage {
constructor () {
this.tableCells = Selector('#ContentHolder_grid_DXDataRow0 td');
this.cellData = [];
this.cellCount = 0;
}
async initCellData () {
this.cellCount = await this.tableCells.count;
for (let i = 0; i < this.cellCount; i++) {
const text = await this.tableCells.nth(i).innerText;
this.cellData.push(text);
}
}
}
test.js:
import { TablePage } from './table-page';
let page = null;
fixture `New Fixture`
.page `https://demos.devexpress.com/ASPxGridViewDemos/DataBinding/QueryBuilderControl.aspx`
.beforeEach(async () => {
page = new TablePage();
await page.initCellData();
});
test(`New Test`, async t => {
console.log('cells count: ', page.cellCount);
console.log('cells data: ', page.cellData);
});
我有一个矢量绘图,我想用浓咖啡测试。 矢量可绘制:ic_video_24dp 我有没有办法用浓缩咖啡对矢量绘图进行UI测试?任何帮助都将不胜感激。
我试图将隐藏字段的值输入到Testcafe中的文本框中,理想的方式是模拟键入。有办法吗?每次我试图通过javascript来实现它时,它都会抛出一个javascript错误。 本质上,我正在测试一个相当标准的网络应用程序——我填写一个表单,一页一页地去,然后必须输入一个保存在页面上隐藏的html输入字段中的值。老实说,我不知道从哪里开始——每次我试图通过“运行测试咖啡馆脚本”使用javascrip
浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误
目标:独立并行地运行两个类,每个测试将方法名存储到一个变量中,该变量可以在测试中稍后访问。 问题:当测试并行运行时,它们开始在它们之间共享数据,从而损坏测试。 如果您看到控制台输出,这是错误的: 因为这是两个独立的类和方法正在运行。我在这里设置了正确的名字: 输出应该是这样的: 种皮 } 测试B } 帮助者方法 Testng.xml 控制台输出
问题内容: 我正在尝试使用Mocha来测试构造函数是否引发错误。我无法使用Expect语法执行此操作,因此我想执行以下操作: 这可能吗? 问题答案: 您可以尝试使用Chai的 构造。例如: