继承类和@FindBy类的执行顺序

时间:2016-12-03 10:58:14

标签: java selenium testng

我们使用 @FindBy 注释来使用Page Object Modeling概念获取web元素。

e.g。

@FindBy(xpath = "//input[@type='text'][@placeholder='Search']")
WebElement searchBox;

但为了获得searchBox元素,我们需要先调用PageFactory.initElements(driver, this);然后再调用该元素。

我在下面设计了框架。

父类:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

import core.driver.WebDriverManager;

public abstract class BasePO {

    static {
        System.out.println("Static Block");
    }

    BasePO() {
        System.out.println("initElements");
        initElements();
    }

    private void initElements() {
        PageFactory.initElements(getDriver(), this);
    }
}

儿童班:

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class TestPO extends BasePO{
    @FindBy(css = "input[title='Search']")
    WebElement searchBox;

    @FindBy(css = "input[value='Google Search']")
    WebElement searchButton;

    public void sendKeys(String inputText){
        searchBox.sendKeys(inputText);
    }

    public void clickOnSearchButton(){
        searchButton.click();
    }
}

测试类:

import org.testng.annotations.Test;

import core.pageobject.TestPO;

public class TestClass{
    @Test
    public void test123() {
        driver = new FirefoxDriver();
        driver.get("http://www.gsmarena.com/");
        TestPO tpo = new TestPO();
        tpo.search("iphone 7");
    }
}

如果我运行测试用例:test()那么根据我的执行步骤将是:

  1. 在[TestClass]中创建了Firefox驱动程序
  2. 网站将在firefox浏览器[在TestClass]中打开
  3. @FindBy注释将首先调用或加载到内存中(我认为它的延迟加载)[在TestPO中]
  4. 静态阻止[在BasePO中]
  5. initElements [in BasePO]
  6. 可以访问搜索框的
  7. WebElement ,并且可以在[在TestClass]中执行 sendKeys 操作
  8. 但是如果我不正确的话会调用@FindBy注释以及执行顺序是什么

1 个答案:

答案 0 :(得分:0)

执行顺序为:

  1. 在[TestClass]中创建了Firefox驱动程序
  2. 网站将在firefox浏览器[在TestClass]中打开
  3. 静态阻止[在BasePO中]
  4. initElements [in BasePO]
  5. @FindBy注释将被初始化(在PageFactory.java中定义的初始化)[在TestPO中]
  6. 可以访问搜索框的WebElement,并且可以在[在TestClass]中执行sendKeys操作