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)
但我不想创建新的FFdriver,我想在登录页面后登录。在同一个测试中。我只想要一个接一个地运行GotoLoginPageTest和LoginTest。林不知道,但我认为测试运行不良,首先是LoginTest和GotoLoginPageTest。我把这里放在eclipse屏幕上http://zapodaj.net/c776122be852e.png.html – ciupakabrans
否则你必须传递一个null驱动程序到Loginpage。另一方面,您应该在全局创建驱动程序,而不是在每个测试对象中创建驱动程序。看到和示例[这里](https://github.com/safrrhmn/SeleniumTestNG/blob/master/src/main/java/com/github/tests/GitHubHomePageTests.java) – Saifur
对不起,我的问题,但我不想在每个测试中创建新的firefoxDriver对象。我只是想做一个测试在哪里运行两个案例。如果我创建新的ffdriver,那么将会打开新的浏览器,我想在一个浏览器中执行这两种情况,一个接一个的 – ciupakabrans