Appium. Использование аннотаций @FindBy, @AndroidFindBy и @IOSFindBy


(Natalja Librante Lace) #1

Добрый день!
Есть ли у кого-то опыт использования аннотаций @FindBy, @AndroidFindBy и @IOSFindBy в проектах Appium

Моя цель – вынести все локаторы элементов на верхний уровень, чтобы не переопределять их для каждого теста отдельно. Однако сейчас если в тесте:

public class AndroidSample_Test{
private AppiumDriver driver;

@Before
public void setUp() throws Exception {
    File classpathRoot = new File(System.getProperty("user.dir"));
    File appDir = new File(classpathRoot, "../../Documents/TestApp");
    File app = new File(appDir, "TestApp.apk");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    capabilities.setCapability("deviceName","Nexus7");
    capabilities.setCapability("platformVersion", "4.3");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("app", app.getAbsolutePath());
     driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
public void tearDown() throws Exception {
    driver.quit();
}

  @AndroidFindBy (id = "example.example.android:id/action_sign_in")
    public WebElement signInLink;

  @Test
    public void enterApp() {
    signInLink.click();
    }

Я получаю ошибку NullPointerExeption

Но, если

@Test
    public void enterApp() {
    WebElement signInLink = driver.findElement(By.id("example.example.android:id/action_sign_in"));
    signInLink.click();
    }

Тест завершается успешно. И так с аннотациями как @FindBy, так и @AndroidFindBy


(Александр Таранков) #2

Для того, чтобы поля класса были проинициализированы через аннотации, необходимо предварительно вызвать initElements для класса страницы.

Чтобы сделать реализацию правильной необходимо использовать для своего фреймворка паттерн PageObject, то есть определять элементы в классах страниц, а не в самих тестах


(Irina Melnik) #3

У меня такая же проблема, инициализирую: PageFactory.initElements(driver, search_page.class), но все равно тест элементы не видит


(Sergey Korol) #4

Чтение официальной документации помогает в таких ситуациях. :wink: