Мы используем @FindBy аннотация для получения веб-элемента с использованием концепции Object Object Modeling.Порядок выполнения классов Inherited class и @FindBy
например.
@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()
затем по мне казни шаги были бы:
- драйвер Firefox создал [в TestClass]
- Веб-сайт откроется в браузере Firefox [в TestClass]
@FindBy
аннотаций будет называться первым или загружен в память (я считаю, что отложенную загрузку) [в TestPO]- Статический блок [в BasePO]
- initElements [в BasePO]
- WebElemen т из SearchBox могут быть доступны и SendKeys действия могут быть выполнены на том, что [в TestClass]
Но если я не исправить, то когда @FindBy
аннотаций можно было бы назвать и то, что будет порядок выполнения
Почему бы не попробовать поставить отладочные точки на все вышеперечисленное. И посмотрите, как вы выполняете заказ, это то, что вы хотите. – nullpointer