2015-10-18 4 views
0

У меня проблема с моими испытаниями в 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) 

ответ

3

Вы никогда не экземпляр драйвера в LoginTest классе. Проинсталлируйте драйвер и передайте его в объект страницы. Что-то вроде этого:

public class LoginTest { 
    WebDriver driver; 
    driver = new FirefoxDriver(); 

    LoginPage lp = PageFactory.initElements(driver, LoginPage.class); 

    @Test 
    public void cheskIsLoginPage(){ 
     lp.isLoginPage(); 
    } 

    @Test 
    public void logInBase(){ 
     lp.fillUserEmail(); 
     lp.fillUserPassword(); 
    } 
} 
+0

Но я не хочу создавать новый FFdriver, я хочу, чтобы после перехода на страницу входа в систему войдите. В том же тесте. Я просто хочу запустить GotoLoginPageTest и LoginTest один за другим. Я не уверен, но я думаю, что тест выполняется в плохом порядке, сначала LoginTest и после GotoLoginPageTest. Я поставил здесь экран из eclipse http://zapodaj.net/c776122be852e.png.html – ciupakabrans

+0

Вы должны в противном случае передать нулевой драйвер на страницу входа. С другой стороны, вы должны создавать драйвер глобально, а не создавать в каждом тестовом объекте. См. И пример [здесь] (https://github.com/safrrhmn/SeleniumTestNG/blob/master/src/main/java/com/github/tests/GitHubHomePageTests.java) – Saifur

+0

Извините за свои вопросы, но я не хочу создайте новый объект firefoxDriver в каждом тесте. Я просто хочу сделать тест, где будут запускать два случая в одном тесте. Если я создам новый ffdriver, тогда будет открыт новый браузер, я хочу сделать этот два случая в одном браузере, один за другим – ciupakabrans

Смежные вопросы