Почему я должен использовать @FindBy вместо driver.findElement () в классе объекта Page - PullRequest
0 голосов
/ 29 августа 2018

Я создаю фреймворк Page Object, изучая его концепции. Я узнал, что Page Factory (@FindBy) используется в сочетании с Page Objects. Однако я не могу понять, почему мне нужно использовать @FindBy, когда я могу использовать driver.findElement с моими локаторами в классе Page Object. Например:

// Код с @ FindBy

  public class LoginPage{

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

     public WebElement q;

    }

    public class TestCase{

WebDriver driver=new FirefoxDriver();
LoginPage logPage=new LoginPage(driver);

 public void enterUserName(){
   logPage.q.sendKeys("username");

}
}

// Код с driver.findElement

public class LoginPage{

 public WebElement q=driver.findElement(By.id('q'));

}

public class TestCase{
WebDriver driver=new FirefoxDriver();
 LoginPage logPage=new LoginPage();

 public void enterUsername(){
  logPage.q.sendKeys("username");
}

}

В чем разница между обоими кодами здесь, поскольку оба кода по сути делают одно и то же?

1 Ответ

0 голосов
/ 29 августа 2018

По сути, нет большой разницы в том, как будут выполняться тесты и что делает драйвер, используете ли вы Driver.FindElement () или аннотацию @FindBy. «Преимущества» использования @FindBy, на мой взгляд, заключаются в том, что он направляет вас к тому, чтобы все элементы и методы Web релевантны для конкретной страницы в одном месте, и отделяет поиск элементов вашей страницы от методов, которые вы используете. на странице, например ниже приведен краткий пример страницы входа (в C #):

public class LoginPage
{
    public IWebDriver Driver;

    [FindsBy(How = How.Id, Using = "username")]
    public IWebElement UsernameField;

    [FindsBy(How = How.Id, Using = "password")]
    public IWebElement PasswordField;

    [FindsBy(How = How.Id, Using = "submit")]
    public IWebElement SubmitButton;

    public LoginPage(IWebDriver driver)
    {
        Driver = driver;
        PageFactory.InitElements(this, new RetryingElementLocator(Driver, TimeSpan.FromSeconds(10)));
    }

    // By this point, all your elements on the page are declared and located,
    // you're now free to carry out whatever operations you'd like on the page 
    // without having to make any further declarations

    public void Login(string username, string password)
    {
        UsernameField.SendKeys(username);
        PasswordField.SendKeys(password);
        SubmitButton.Click();
    }
}

Итак, я бы сказал, что это в основном предпочтение, но также можно утверждать, что есть несколько убедительных аргументов в пользу "аккуратности" / организации, которую приносит аннотация @FindBy.

...