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);
}
}
