Jest + TypeScriptでボタンをクリックした後、次のページが開くまで待つ方法は?

私は2番目のページで利用可能なフィールドに基づいて
“ログイン”機能のテストを合格または不合格にしたい。フィールドをキャプチャするために「xpath」を使用しました。しかし、それは第2ページのフィールドをキャプチャしません。コードが2番目のページのフィールドをチェックしようとすると、2番目のページが読み込まれないという理由が考えられます。ログインページのフィールドの1つをキャプチャしようとすると、エラーメッセージは表示されないためです。

login_page.ts driver: any;

//Define Locators
_email_field = "user_email";
_password_field = "user_password";
_login_button ="commit"
_login_url: string = 'https://sso.teachable.com/secure/42299/users/sign_in?clean_login=true&reset_purchase_session=1';


constructor(){  
    this.driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();

    this.driver.get(this._login_url).then(function (err:any) {
        console.log(`Page opened`);            
    })

}

enterEmail(email:any){
    this.driver.findElement(By.id(this._email_field)).sendKeys(email);        
}  

enterPassword(password:any){
    return this.driver.findElement(By.id(this._password_field)).sendKeys(password);
}

clickLoginButton(){
    return this.driver.findElement(By.name(this._login_button)).click();
}

public login(email:any, password:any) {

     return this.driver.getCurrentUrl().then(() =>{           

        this.enterEmail(email);
        this.enterPassword(password);
        this.clickLoginButton()

        console.log(`login button clicked`);  

    })

}public verifyLoginSuccessful()
{

    try{
        this.driver.findElement(By.xpath(".//*[@id='new_user']/div[1]/label")); //This field available on login page
        this.driver.findElement(By.xpath(".//*[@id='nav-bar']//span[text()='User Settings']"));           
        this.driver.findElement(By.xpath(".//*[@id='search-courses']"));
        console.log("Element Found");
    }
    catch(e){
        console.log("Element Not Found");
    }

login.test.ts

 it('Should log into kodeit' ,async()=>{
        await loginPage.login("[email protected]", "abcabc").then(()=> {
            console.log(`Return to test after logged in`);  
        }).then(()=> {
               let result = loginPage.verifyLoginSuccessful();
               expect(result).toBeTruthy();
    })   

ベストアンサー

私は解決策を見いだすことができた。

login_page.ts

driver: ThenableWebDriver; 

findWelcomeMessageField(){
    return this.driver.wait(until.elementLocated(By.id('welcome')), 2000);
}

public async verifyLoginSuccessful()
{
    const result = await this.findWelcomeMessageField();
    if (result != null ){
        console.log("Element Found");
        return true;
    }   
    else{
        console.log("Element Not Found");
        return false;
    }          
}

これは私のために働いた。誰かが同じ問題に直面した場合に備えて答えを加えました。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です