Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проблема запуска теста с @FindBy

webdriver
java
Теги: #<Tag:0x00007f7b65e94f20> #<Tag:0x00007f7b65e94de0>

(Roy Obenon) #1

Пытаюсь освоить FindBy, но вот как то не получается запустить самый простейший тест (просто кликание на кнопку)

public class IncorrectPassword {
private WebDriver driver;

@FindBy(id = "ember128")
private WebElement searchButtonLogIn;

public IncorrectPassword(WebDriver driver) {
    PageFactory.initElements(driver, this);
    this.driver = driver;
}


public void LogIn() {
    searchButtonLogIn.click();
}

@Test
public void run(){
    IncorrectPassword incorrectPassword = new IncorrectPassword(driver);
    driver.get("http://automated-testing.info/login");
    incorrectPassword.LogIn();
}
}
Exception: Test class should have exactly one public zero-argument constructor

Ant+Junit+настройка тестов
(vmaximv) #2

А причем тут @FindBy?
Вы бы на трассу посмотрели и/или у гугла спросили, кто вам “фу-фу-фу” делает.


(Максим Малунов) #3

У вас все вместе тестовый class и page class

делите на 2 .
тестовый class

 public class TestOpen{
    private WebDriver driver;
  @BeforeClass
        public void TestOpen(){    
         IncorrectPassword incorrectPassword = new IncorrectPassword(driver);    
        }
    @Test
    public void run(){        
        driver.get("http://automated-testing.info/login");
        incorrectPassword.LogIn();
        }
    }

структура проєкта надеюсь pom файлом задано стандартно .


(Roy Obenon) #4
Класс реализации

public class IncorrectPassword {
private WebDriver driver;

@FindBy(id = "ember128")
private WebElement searchButtonLogIn;

public IncorrectPassword(WebDriver driver) {
    PageFactory.initElements(driver, this);
    this.driver = driver;
}

public void LogIn() {
    searchButtonLogIn.click();
   }
}

Тестовый класс

public class Start {
private WebDriver driver;
private IncorrectPassword incorrectPassword;

@Before
public void before() {
     incorrectPassword = new IncorrectPassword(driver);
}


@Test
public void run() {
    driver.get("http://automated-testing.info");
    incorrectPassword.LogIn();
   }
}

NullPointerException

Наверно из за того что driver не инициализирован, хотя это тоже не помогает


(Максим Малунов) #5

@BeforeClass
2)

класс BaseStart 
 WebDriver driver; 
@BeforeTest(alwaysRun = true);
public void init() {
 driver = new FirefoxDriver();
}
  1. Start extends BaseStart

(Roy Obenon) #6

всё равно NullPointerException

class BaseStart {
private WebDriver driver;

@BeforeTest(alwaysRun = true)
public void init() {
    driver = new FirefoxDriver();
}
@FindBy(id = "ember128")
private WebElement searchButtonLogIn;

public BaseStart(){
    super();
}
public BaseStart(WebDriver driver) {
    PageFactory.initElements(driver, this);
    this.driver = driver;
}

public void LogIn() {
    searchButtonLogIn.click();
   }
}



public class Start extends BaseStart {
private WebDriver driver;
private BaseStart base;

@Test
public void run() {
    base = new BaseStart(driver);
    driver.get("http://automated-testing.info");
    base.LogIn();
   }
}

(Roy Obenon) #7

Переделал и запустилось, изменил драйвер на static в BaseStart

class BaseStart {
 static WebDriver driver;

@BeforeTest(alwaysRun = true)
public void init() {
    driver = new FirefoxDriver();
}
@FindBy(id = "ember1241")
public WebElement searchButtonLogIn;

public BaseStart(){
    super();
}
public BaseStart(WebDriver driver) {
    PageFactory.initElements(driver, this);
    this.driver = driver;
}

public void LogIn() {
    searchButtonLogIn.click();
   }
}

public class Start extends BaseStart {

public BaseStart base;

@Test
public void run() {
    base = new BaseStart(driver);
    driver.get("http://automated-testing.info");
    base.LogIn();
   }
}

(Максим Малунов) #8

А ёё это опять каша .

три класса

1) Page 
public class IncorrectPassword {
  Webdriver driver ;      
@FindBy(id = "ember128")
private WebElement searchButtonLogIn;

public IncorrectPassword(WebDriver driver) {
     this.driver = driver;
    PageFactory.initElements(driver, this);

}

public void LogIn() {
    searchButtonLogIn.click();
   }
}

в ней могут быть токо локаторы и методы работы с локаторами . не должно быть никаких анотаций .
когда Page классов станет много лучше всего вынести в СommonPage

public IncorrectPassword(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);

}

(Максим Малунов) #9
public class Start extends BaseStart {

@Test
public void run() {
     IncorrectPassword incor = new IncorrectPassword(driver) 
    driver.get("http://automated-testing.info");    
    incor.LogIn()    //  методы лучше писать с маленькой буквы 
   }
}

(Максим Малунов) #10
    class BaseStart {
          WebDriver driver;

    @BeforeTest(alwaysRun = true)
    public void init() {
        driver = new FirefoxDriver();
    }
  }