TLDR,我认为 wdio 6 中的 typescript 类型定义是错误的。
尝试输入runCheck
asany
以解决问题。
import { expect } from 'chai';
import { Browser } from 'webdriverio'
describe('WebdriverIO 6', () => {
it("has broken typescript type definitions", () => {
const runCheck: any =
async (v1: number, callback: Function): Promise<void> => {
callback(v1);
};
const canReceive =
async (browser: WebdriverIO.BrowserObject): Promise<boolean> => {
const v1 = 50;
const rate = await browser.call(() => browser.executeAsync(runCheck, v1));
return rate > 10;
};
})
})
长版。
我查看了 browser.executeAsync 的文档,看起来您正在传递它应该接受的参数。
“脚本参数以函数体的形式定义要执行的脚本。该函数将使用提供的 args 数组调用,并且可以通过参数对象以指定的顺序访问值。最终参数将始终是回调必须调用该函数以表示脚本已完成。”
https://v6.webdriver.io/docs/api/browser/executeAsync.html
在检查 executeAsync 的类型定义时,我看到了这个
// there is no way to add callback as last parameter after `...args`.
// https://github.com/Microsoft/TypeScript/issues/1360
// executeAsync: <T>(script: string | ((...arguments: any[], callback: (result: T) => void) => void), ...arguments: any[]) => Promise<T>;
/**
* Inject a snippet of JavaScript into the page for execution in the context of the currently selected frame.
* The executed script is assumed to be asynchronous and must signal that is done by invoking
* the provided callback, which is always provided as the final argument to the function. The value
* to this callback will be returned to the client.
*/
executeAsync: <U extends any[], V extends U>(script: string | ((...arguments: V) => void), ...arguments: U) => Promise<any>;