@@ -7,6 +7,7 @@ import { WebDriver, WebElementCondition, By } from "selenium-webdriver";
77import { IAppiumDriver } from './appiumdriver' ;
88
99export interface IPageObject {
10+ elementExists ( by : By , timeout ?: number ) : Promise < boolean > ;
1011 clickAndGotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , by : By , timeout ?: number ) : Promise < T > ;
1112 gotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , timeout ?: number ) : Promise < T > ;
1213 isReadyConditions ( ) : WebElementCondition [ ] ;
@@ -17,14 +18,14 @@ function getInstance<T>(type: (new (...args: any[]) => T), ...args: any[]): T {
1718 return new type ( ...args ) ;
1819} ;
1920
20- function gotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , driver : IAppiumDriver , timeout ?: number ) : Promise < T > {
21+ export function gotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , driver : IAppiumDriver , timeout ?: number ) : Promise < T > {
2122 const page = getInstance ( type , driver ) ;
2223 return new Promise < T > ( ( resolve ) => {
2324 page . waitUntilReady ( timeout ) . then ( ( ) => resolve ( page ) )
2425 } ) ;
2526}
2627
27- function clickAndGotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , driver : IAppiumDriver , by : By , timeout ?: number ) : Promise < T > {
28+ export function clickAndGotoPage < T extends IPageObject > ( type : ( new ( ...args : any [ ] ) => T ) , driver : IAppiumDriver , by : By , timeout ?: number ) : Promise < T > {
2829 return new Promise < T > ( ( resolve ) => {
2930 driver . get ( by , timeout )
3031 . then ( el => { return el . click ( ) ; } )
@@ -55,6 +56,14 @@ export class PageObject implements IPageObject {
5556 this . appiumDriver = dirver ;
5657 }
5758
59+ elementExists ( by : By , timeout ?: number ) : Promise < boolean > {
60+ return new Promise < boolean > ( resolve =>
61+ this . appiumDriver . seleniumDriver ( ) . findElement ( by )
62+ . then ( ( ) => resolve ( true ) )
63+ . catch ( ( ) => resolve ( false ) )
64+ ) ;
65+ }
66+
5867 isReadyConditions ( ) : WebElementCondition [ ] {
5968 throw new Error ( "Not implemented" ) ;
6069 }
@@ -78,7 +87,9 @@ export class PageObject implements IPageObject {
7887
7988 private static async waitForConditions ( driver : WebDriver , conditions : WebElementCondition [ ] , timeout ?: number ) {
8089 for ( var i = 0 ; i < conditions . length ; i ++ ) {
81- await driver . wait ( conditions [ i ] , timeout ) ;
90+ if ( conditions [ i ] ) {
91+ await driver . wait ( conditions [ i ] , timeout ) ;
92+ }
8293 }
8394 }
8495}
0 commit comments