我们使用 @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()
那么根据我的执行步骤将是:
@FindBy
注释将首先调用或加载到内存中(我认为它的延迟加载)[在TestPO中] 但是如果我不正确的话会调用@FindBy
注释以及执行顺序是什么
答案 0 :(得分:0)
执行顺序为:
@FindBy
注释将被初始化(在PageFactory.java中定义的初始化)[在TestPO中]