Vyhledávání na webu

Jak zobrazit řetězení (ControlFlow) akcí Protractoru (WebDriver) v TypeScriptu


V testu pomocí protractoru je možné řetězit akce jako „clear“ a „sendKeys“ na elementu takto:

element(by.id('myId')).clear().sendKeys('123456789')

Líbí se mi jeho kompaktní styl. Ale proč to funguje?

Podle dokumentace API metody webdriver.Element.clear() je návratový typ metody clear() webdriver.promise.Promise.<void>

Když to kompiluji s TypeScript (1.8.x), kompilátor si stěžuje, že neexistuje žádná vlastnost nazvaná sendKeys() na Promise. A myslím, že to je vlastně pravda.

Věřím, že to funguje za běhu díky magii WebDriver ControlFlow.

Jak mohu rozšířit TypeScript deklaraci souboru Protractoru, aby odrážela tuto kouzelnou ControlFlow a udělala můj TypeScript kompilátor spokojeným?

Odpověď č. 1

Můžete ji přetypovat na typ <any> takto:

(<any> someInput.clear()).sendKeys()

Ošklivé, ale funguje bez stížnosti TS.

Odpověď č. 2

nakonec jsme funkci přidali do jmenného prostoru takto

declare namespace webdriver.promise {
    interface Promise<T> {
        sendKeys(s: String);
    }
}

Související články