2016-12-03 2 views
0

Мы используем @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() затем по мне казни шаги были бы:

  1. драйвер Firefox создал [в TestClass]
  2. Веб-сайт откроется в браузере Firefox [в TestClass]
  3. @FindBy аннотаций будет называться первым или загружен в память (я считаю, что отложенную загрузку) [в TestPO]
  4. Статический блок [в BasePO]
  5. initElements [в BasePO]
  6. WebElemen т из SearchBox могут быть доступны и SendKeys действия могут быть выполнены на том, что [в TestClass]

Но если я не исправить, то когда @FindBy аннотаций можно было бы назвать и то, что будет порядок выполнения

+0

Почему бы не попробовать поставить отладочные точки на все вышеперечисленное. И посмотрите, как вы выполняете заказ, это то, что вы хотите. – nullpointer

ответ

0

порядок выполнения будет:

  1. драйвер Firefox создал [в TestClass]
  2. веб-сайт откроется в браузере Firefox [в TestClass]
  3. Статического блок [в BasePO]
  4. initElements [в BasePO]
  5. @FindBy аннотаций будут инициализированы (инициализации, определенных в PageFactory.java) [в TestPO]
  6. WebElement из SearchBox может быть доступен и SendKeys действие может выполняться на этом [в TestClass]
Смежные вопросы