gpt4 book ai didi

javascript - Spectron/WebdriverIO 第 n 个子节点使用 $$[n] 而不是选择器

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:42 26 4
gpt4 key购买 nike

我正在尝试使用 Spectron 来测试我的 Electron 应用程序。文档说当试图找到第 n 个 child 时,您可以使用第 n 个 child 选择器,或者使用 $$ 获取匹配选择器的所有 child ,然后使用索引运算符即 $$ ("foo ")[0] 获取第一个 foo。 DOCS

有了这些知识,我希望输出以下代码: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]未定义

旁注(应该不相关):TP 是我编写的一个名为 toPromise 的函数的别名,它让我等待 webdriver promises,因为 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;
};
}

知道我做错了什么吗?或者建议的替代方案?如果可能,我宁愿避免使用第 n 个子选择器。

编辑:更改为类

最佳答案

实际上 webdriver 窗口索引和元素指的是 [1] 是第一个元素。

这对我来说效果很好。

var button = ('//*[contains(@class,"popper")]')[1];

return this.app.client.click(button);

示例:

class Clix {

constructor() {

this.clix_search = '(//input[contains(@class,"clix-search")])[1]';

}

clix_input_search(app) {
return help.setValue(app, this.clix_search, "pack");
}

}

在助手类中

setValue(app, element, text) {

return app.client.waitForVisible(element, 60000)
.waitForEnabled(element, 60000)
.clearElement(element)
.setValue(element, text)
.getValue(element)
.should.eventually.equal(text)

}

关于javascript - Spectron/WebdriverIO 第 n 个子节点使用 $$[n] 而不是选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com