我正在使用带角度应用的量角器。我的页面模型中的内容如下:
export interface TileElement {
idx: number;
icon: string;
title: string;
element: WebElementPromise;
}
getModels() { //used as wfc.getModels() below.
return $$('mat-card').map((e, idx) => {
// e.click();
return {
idx,
icon: e.$('mat-card-content div:nth-child(1)').getText(),
title: e.$('mat-card-content div:nth-child(2)').getText(),
element: e.getWebElement()
};
}) as Promise<TileElement[]>;
}
如您所见,我尝试将WebElement
to 作为结果的一部分进行传播,以便调用者稍后可以实际使用它做一些有用的事情 - 在我的情况下单击。我这样用
await wfc.goToPage(); //works fine
const models = await wfc.getModels(); //works as expected - getModels from snippet above
console.log(await models[0].element.getId()); //prints some number eg 0.6760710380568453-1
console.log(await models[0].element.click()); //fails
//await $('mat-card').click(); this actually works
但是,执行失败并出现异常
Failed: this.getId(...).then is not a function
TypeError: this.getId(...).then is not a function
at WebElement.[serialize] (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:1992:25)
at convertValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:152:48)
at C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:187:17
at forEachKey (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:177:9)
at C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:183:5
at new Promise (<anonymous>)
at convertKeys (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:182:10)
at convertValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:156:10)
at toWireValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:128:26)
at Driver.schedule (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:802:23)
如上所示,如果我这样做await $('mat-card').click();
,它会按预期工作。如果我执行click
内部映射回调,它也会起作用。
问题是为什么它不能与以前选择的 WebElement 一起使用?我不想在每次操作之前都选择元素。
作为一种解决方法,我将附加e.locator()
作为我的接口的一部分,所以在执行过程中我正在做await element(item.locator).click()
点击发生,但这似乎是错误的。