У меня проблема с моими испытаниями в WebDriver.Два теста один за другим
В первом пакете у меня есть 2 класса (страницы) HomePage, LoginPage.
В упаковке secound у меня есть тест - goToLiginPageTest и LoginTest.
В goToLiginPage Я проверяю, я нахожусь на главной странице и перехожу на страницу входа.
В LoginTest Я проверяю, что я нахожусь на странице входа и логин.
Но два теста из goToLiginPageTest проходят, но тест из LoginTest не выполняется.
Я не уверен, что неправильно с моим textng.xlm или где я ошибаюсь. Пожалуйста, помогите мне.
public class HomePage {
WebDriver driver;
public static final String PAGE_TITLE = "page title";
public static final String PAGE_URL = "www.blbl.pl";
@FindBy(xpath = "//*[@id='global-nav']/div/div/div[3]/ul/li[1]/a")
WebElement LogInLink;
public HomePage(WebDriver driver){
this.driver = driver;
}
public void isHomePage(){
String pageTitle = driver.getTitle();
Assert.assertEquals(pageTitle, PAGE_TITLE);
}
public void goToLoginPage(){
LogInLink.click();
}
}
LoginPage
public class LoginPage {
WebDriver driver;
public static final String PAGE_TITLE = "Login";
@FindBy(id="user_email")
WebElement inputUserEmail;
@FindBy(id="user_password")
WebElement inputUserPassword;
public LoginPage(WebDriver driver){
this.driver = driver;
}
public void isLoginPage(){
String pageTitle = driver.getTitle();
Assert.assertEquals(pageTitle, PAGE_TITLE);
}
public void fillUserEmail(){
inputUserEmail.sendKeys("[email protected]");
Assert.assertEquals(inputUserEmail.getAttribute("value"), "[email protected]");
}
public void fillUserPassword(){
inputUserPassword.sendKeys("123456");
Assert.assertEquals(inputUserPassword.getAttribute("value"), "123456");
}
}
GotoLoginPageTest
import pages.HomePage;
public class GotoLoginPageTest {
WebDriver driver;
HomePage hp;
@BeforeClass
public void setup(){
this.driver = new FirefoxDriver();
hp = PageFactory.initElements(driver, HomePage.class);
driver.get(HomePage.PAGE_URL);
}
@Test(priority = 1)
public void isHomePage(){
hp.isHomePage();
}
@Test(dependsOnMethods = "isHomePage")
public void gotoLoginPage(){
hp.goToLoginPage();
}
}
LoginTest
public class LoginTest {
WebDriver driver;
LoginPage lp = PageFactory.initElements(driver, LoginPage.class);
@Test
public void cheskIsLoginPage(){
lp.isLoginPage();
}
@Test
public void logInBase(){
lp.fillUserEmail();
lp.fillUserPassword();
}
}
мой testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<test name="Test">
<classes>
<class name="tests.GotoLoginPageTest"/>
<class name="tests.LoginTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
У меня есть ошибка
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy5.sendKeys(Unknown Source)
at pages.LoginPage.fillUserEmail(LoginPage.java:30)
at tests.LoginTest.logInBase(LoginTest.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:659)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:845)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1153)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:771)
at org.testng.TestRunner.run(TestRunner.java:621)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:357)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310)
at org.testng.SuiteRunner.run(SuiteRunner.java:259)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1199)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1124)
at org.testng.TestNG.run(TestNG.java:1032)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Но я не хочу создавать новый FFdriver, я хочу, чтобы после перехода на страницу входа в систему войдите. В том же тесте. Я просто хочу запустить GotoLoginPageTest и LoginTest один за другим. Я не уверен, но я думаю, что тест выполняется в плохом порядке, сначала LoginTest и после GotoLoginPageTest. Я поставил здесь экран из eclipse http://zapodaj.net/c776122be852e.png.html – ciupakabrans
Вы должны в противном случае передать нулевой драйвер на страницу входа. С другой стороны, вы должны создавать драйвер глобально, а не создавать в каждом тестовом объекте. См. И пример [здесь] (https://github.com/safrrhmn/SeleniumTestNG/blob/master/src/main/java/com/github/tests/GitHubHomePageTests.java) – Saifur
Извините за свои вопросы, но я не хочу создайте новый объект firefoxDriver в каждом тесте. Я просто хочу сделать тест, где будут запускать два случая в одном тесте. Если я создам новый ffdriver, тогда будет открыт новый браузер, я хочу сделать этот два случая в одном браузере, один за другим – ciupakabrans