2017-10-18 21 views
0

Spectronは、node.jsの自動化フレームワークElectronアプリです。私は、SpectronをAVATypescriptと一緒に使用して、自動統合テストを行っています。私はAVA's suggest methodを使用してテストのコンテキストをタイプセーフにしていますが、webdriverioクライアントであるSpectronのクライアントプロパティでtypesafetyを取得する方法を理解することはできません。私はSpectronのタイプスクリプト定義ファイルが提供しているいくつかのプロパティしか見ることができません。これは、タイプスクリプトのトランスパイールエラーを引き起こしています。SpectronClient用のTypescript webdriverioはどのように実装しますか?

これらは私が取得していますエラーです:

src/pages/drive-shell.ts(7,34): error TS2339: Property 'waitForVisible' does not exist on type 'SpectronClient'. 
src/pages/login.ts(7,34): error TS2339: Property 'waitForVisible' does not exist on type 'SpectronClient'. 
src/pages/login.ts(11,21): error TS2339: Property 'setValue' does not exist on type 'SpectronClient'. 
src/pages/login.ts(12,21): error TS2339: Property 'setValue' does not exist on type 'SpectronClient'. 
src/pages/login.ts(13,21): error TS2339: Property 'click' does not exist on type 'SpectronClient'. 

答えて

0

私は実際に私が質問を入力したとして、これを解決したが考え出し、私はいくつかの検索をしたので、私は私が答えるかもしれないと思った任意の解決策を見つけることができませんでした他人を助けるために私自身の質問。

私は

npm i -S @types/webdriverio 

ioのwebdriverをのためのタイピングを取得するために必要とし、私は私のlogin.tsスクリプトにそのタイプをインポートし、SpectronClient

import * as WebdriverIO from 'webdriverio'; 
export class Login { 
    constructor(private client: WebdriverIO.Client<void>) { } 

    public async waitForPageToLoad() { 
     return await this.client.waitForVisible('#username'); 
    } 

    public login(username: string, password: string) { 
     this.client.setValue('#username', username); 
     this.client.setValue('#Password', password); 
     this.client.click('#login'); 
    } 
} 

と、ここのように私の完全なtest.tsテストであることを使用しますスクリプト

import * as ava from 'ava'; 
import { Application } from 'spectron'; 
import { Login } from './pages/login'; 
import { Settings } from './settings'; 

function contextualize<T>(getContext:() => Promise<T>): ava.RegisterContextual<T> { 
    ava.test.beforeEach(async (t) => { 
     Object.assign(t.context, await getContext()); 
    }); 
    return ava.test; 
} 
const test = contextualize(async() => { 
    const app = new Application({ 
     path: '../electron.exe', 
     args: ['../app/index.html'], 
    }); 
    await app.start(); 
    return { app }; 
}); 

test.afterEach.always(async (t) => await t.context.app.stop()); 

test('can login', async (t) => { 
    const login = new Login(t.context.app.client); 
    await login.waitForPageToLoad(); 
    login.login(Settings.username, Settings.password); 
}); 
関連する問題