我正在尝试使用 Spectron 来测试我的 Electron 应用程序。文档说,当试图找到第 n 个孩子时,您可以使用第 n 个孩子选择器,或者使用匹配选择器的所有孩子,$$
然后使用索引运算符,即$$ ("foo")[0]
获取第一个 foo。 文档
有了这些知识,我希望输出以下代码:BAR
我无法让它工作,我尝试以下操作:
const foo = ".foo";
const fooElements = app.client.$$ (foo);
console.log ("FOOELEMENTS", await TP (app.client.getHTML (foo)));
console.log ("BAR", fooElements[0].getText (".bar"));
并得到以下输出:
console.log components\pages\analysis\__test__\Analysis.spectron.ts:44
FOOELEMENTS [ '<div class="foo"><div class="bar">BAR</div><div class="baz">BAZ</div></div>',
'<div class="foo"><div class="bar">BAR2</div><div class="baz">BAZ2</div></div>',
'<div class="foo"><div class="bar">BAR3</div><div class="baz">BAZ3</div></div>'
'<div class="foo"><div class="bar">BAR4</div><div class="baz">BAZ4</div></div>' ]
console.log components\pages\analysis\__test__\Analysis.spectron.ts:50
EXCEPTION TypeError: Cannot read property 'getText' of undefined
at components\pages\analysis\__test__\Analysis.spectron.ts:45:44
at Generator.next (<anonymous>)
at fulfilled (components\pages\analysis\__test__\Analysis.spectron.ts:4:58)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)
正如你所看到的,输出的 HTML 确实有几个.foo
div,但是当我尝试访问第一个时,它说fooElements[0]
是undefined
sideNote(应该不相关):TP
是我写的一个函数的别名,toPromise
它让我等待 webdriver 的承诺,因为 TypeScript 被它们的实现方式混淆了:
export async function toPromise<T> (client: Webdriver.Client<T>)
{
return client as any as Promise<T>;
}
// Promise
interface Client<T> {
finally(callback: (...args: any[]) => void): Client<T>;
then<P>(
onFulfilled?: (value: T) => P | Client<P>,
onRejected?: (error: any) => P | Client<P>
): Client<P>;
catch<P>(
onRejected?: (error: any) => P | Client<P>
): Client<P>;
inspect(): {
state: "fulfilled" | "rejected" | "pending";
value?: T;
reason?: any;
};
}
知道我在做什么错吗?还是建议的替代方案?如果可能的话,我宁愿避免使用 nth-child 选择器。
编辑:更改为类