2017-10-15 101 views
1

我添加功能與addCommand,當我使用它得到以下錯誤:用addCommand(webdriverio)添加自定義命令當具有TS差錯

[ts] Property 'WaitForElementsAmount' does not exist on type 'Client<void>'. 

例如:

browser.addCommand("test" ,() => {console.log("test"); }) 
browser.test(); 

最後一行會有錯誤。

它的實際工作(JS代碼是正確的),並測試運行良好。 我的問題是我該如何解決這個問題?

回答

0

第一:有一個在你的代碼中的一些錯字的錯誤,你缺少關閉browser.addCommand()。應該是這樣的:

browser.addCommand("test" ,() => {console.log("test"); }); 
browser.test(); 

二:我認爲這只是一個錯字的錯誤,而你在這裏輸入的,所以實際的答案會是以下鏈接瞭解更多有關聲明的自定義命令和執行這些: Where do I add custom commands in WebdriverIO with wdio testrunner?

0

我今天在這個相同的問題上掙扎了很長時間,但我明白了。

假設你正在使用@類型/ webdriverio,你需要與你的自定義命令的聲明延伸WebdriverIO.Client接口。如果可以,請確保您的自定義命令是在.ts文件中定義的。然後,你可以做這樣的事情:

declare global { 
    namespace WebdriverIO { 
     interface Client<T> { 
      doCustomThing: typeof doCustomThing; 
     } 
    } 
} 

function doCustomThing() { 
    console.log("test"); 
} 

//both of these should now work 
browser.addCommand('doCustomThing' , doCustomThing) 
browser.doCustomThing(); 

如果你不能得到打字稿實現您的自定義命令,您仍然可以單獨聲明他們在.d.ts文件看起來像這樣:

declare namespace WebdriverIO { 
    interface Client<T> { 
     doCustomThing(): void; 
    } 
} 

但你必須保持在單獨的文件中單獨申報和實施,並確保它們保持同步。除非你別無選擇,否則我不會走這條路線,而是用普通的JS繼續實施。

該測試成功地利用打字稿2.6.1,webdriverio 4.9.10,和@類型/ webdriverio 4.8.6。

注:在第一個例子,你必須指定要改變在全球範圍內的WebdriverIO命名空間的定義,但在第二,你是在全球範圍內隱工作。這是因爲第一個模塊位於模塊內部,而第二個模塊不是模塊,因爲它不導入或導出任何內容。欲瞭解更多信息,請參閱https://www.typescriptlang.org/docs/handbook/modules.html