Как добавить явное ожидание в PageFactory в PageObjectModel? - PullRequest
0 голосов
/ 12 января 2019

Я добавил жёсткий код ожидания thread.sleep() в коде ниже. Как использовать явное ожидание. Я хочу подождать, пока не появится веб-элемент "username". Моя программа работает отлично. Я уже написал тестовые случаи.

package com.pol.zoho.PageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ZohoLoginPage {

WebDriver driver;
public ZohoLoginPage(WebDriver driver)
{
    PageFactory.initElements(driver, this);
}

@FindBy(xpath=".//*[@id='lid']")
public WebElement email;

@FindBy(xpath=".//*[@id='pwd']")
public WebElement password;

@FindBy(xpath="//*[@id='signin_submit']")
public WebElement signin;

public void doLogin(String username,String userpassword)
{
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    email.sendKeys(username);
    password.sendKeys(userpassword);
    signin.click();
}

}

Ответы [ 2 ]

0 голосов
/ 14 января 2019

При использовании PageFactory в PageObjectModel , если вы ожидаете, что элемент будет загружен через какой-либо JavaScript , и он может отсутствовать на странице, которую вы уже можете использовать поддержка Явное ожидание с фабрикой обычного локатора выглядит следующим образом:

  • Кодовый блок:

    package com.pol.zoho.PageObjects;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.FindBy;
    import org.openqa.selenium.support.PageFactory;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class ZohoLoginPage {
    
        WebDriver driver;
        public ZohoLoginPage(WebDriver driver)
        {
            PageFactory.initElements(driver, this);
        }
    
        @FindBy(xpath=".//*[@id='lid']")
        public WebElement email;
    
        @FindBy(xpath=".//*[@id='pwd']")
        public WebElement password;
    
        @FindBy(xpath="//*[@id='signin_submit']")
        public WebElement signin;
    
        public void doLogin(String username,String userpassword)
        {
            WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(ZohoLoginPage.getWebElement()));
            email.sendKeys(username);
            password.sendKeys(userpassword);
            signin.click();
        }
    
        public WebElement getWebElement()
        {
            return email;
        }
    
    }
    

Подробное обсуждение можно найти в Как использовать явное ожидание с полями PageFactory и шаблоном PageObject

0 голосов
/ 12 января 2019

У вас есть два варианта:

1 - Вы можете использовать implicity wait при инициализации драйвера.

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

2 - использовать ожидание объяснения только для поля имени пользователя:

WebDriverWait wait = new WebDriverWait(driver,30);
WebElement element = wait.until(
                    ExpectedConditions.visibilityOf(By.id(identifier)));
...