Я впервые реализую модель POM slenium.
Я использую скелетную функцию для инициализации моего WebDriver. Это как показано ниже:
File pathToBinary = new File("<path>\firefox.exe");
FirefoxBinary binary = new FirefoxBinary(pathToBinary);
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.proxy.http", "<proxyaddress>");
profile.setPreference("network.proxy.http_port", "<portnumber>");
driver = new FirefoxDriver(binary, new FirefoxProfile());
driver.manage().window().maximize();
Мое приложение работает правильно, и я могу войти в систему. Но когда я перехожу к другой ссылке, я получаю java.lang.NullPointerException.
Я сделал вывод о проблеме, поскольку она возникает из-за того, что все объекты класса (разных страниц) инициализируются во время запуска набора селенов, и, следовательно, мой класс элементов, выполняемый во второй или третьей позиции, не был инициализирован.
Первая строка в приведенном ниже коде используется для получения экземпляра драйвера, а оставшийся код используется для создания объектов.
WebDriver driver = Driver.AppDriver.getInstance();
FirstClass obFirstClass = new FirstClass();
SecondClass objSecondClass = new SecondClass ();
ThirdClass objThirdClass = new ThirdClass ();
используя objFirstClass, я могу войти в свою систему и подтвердить свой логин. используя objSecondClass, я могу напечатать строку, представляющую успех входа в систему. но с помощью objThirdClass я не могу вводить значения для объектов WebElements или Select.
Это дает ошибку Null Exception.
public class TestClass
{
WebDriver driver = Driver.AppDriver.getInstance();
FirstClass obFirstClass = new FirstClass();
SecondClass objSecondClass = new SecondClass ();
ThirdClass objThirdClass = new ThirdClass (driver);
@Test(priority=2)
public void method()
{
objThirdClass.action1();
System.out.println("after action"); //-> This line is being printed
objThirdClass.action2(param1, param2, param3);
}
}
public class ThirdClass {
WebDriver driver = Driver.AppDriver.getInstance();
public ThirdClass(WebDriver _driver){
//This initElements method will create all WebElements
driver = _driver;
PageFactory.initElements(driver, this);
}
@FindBy(xpath=<xpath>)
WebElement elementCreate;
@FindBy(id=<id1>)
Select selectElement1;
@FindBy(id=<id2>)
Select selectElement2;
@FindBy(id=<id3>)
Select selectElement3;
@FindBy(id="submit")
WebElement elementSubmit;
public void action1()
{
JavascriptExecutor executor2 = (JavascriptExecutor)driver;
executor2.executeScript("arguments[0].click();", elementCreate);
System.out.println("Create link found");
}
public void setElement1(String str1)
{
selectElement1.selectByVisibleText(str1);
}
public void setElement1(String str2)
{
selectElement2.selectByVisibleText(str2);
}
public void setElement1(String str3)
{
selectElement3.selectByVisibleText(str3);
}
public void submit()
{
submit.click();
}
public void action2(String string1, String string2, String string3,)
{
this.setElement1(str1);
this.setElement2(str2);
this.setElement3( str3)
this.submit();
}
}