我想将常用方法分组到一个文件中并使用它。例如,可以多次使用使用selenium登录页面。在类A中定义它并在类B中调用它。但是,它会抛出空指针异常。
A班有
public void test_Login() throws Exception
{
try{
selenium.setTimeout("60000");
selenium.open("http://localhost");
selenium.windowFocus();
selenium.windowMaximize();
selenium.windowFocus();
selenium.type("userName", "admin");
selenium.type("password", "admin");
Result=selenium.isElementPresent("//input[@type='image']");
selenium.click("//input[@type='image']");
selenium.waitForPageToLoad(Timeout);
}
catch(Exception ex)
{
System.out.println(ex);
ex.printStackTrace();
}
}
使用所有其他java语法
在B级
public void test_kk() throws Exception
{
try
{
a.test_Login();
}
catch(Exception ex)
{
System.out.println(ex);
ex.printStackTrace();
}
}
所有语法。
当我执行B类时,我收到了这个错误,
java.lang.NullPointerException
at A.test_Login(A.java:32)
at B.test_kk(savefile.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at com.thoughtworks.selenium.SeleneseTestCase.runBare(SeleneseTestCase.j
ava:212)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at junit.textui.TestRunner.doRun(TestRunner.java:116)
at junit.textui.TestRunner.doRun(TestRunner.java:109)
at junit.textui.TestRunner.run(TestRunner.java:77)
at B.main(B.java:77)
我希望有人必须先尝试过这个。我可能会想念这里。
答案 0 :(得分:2)
我们这样做的方式是,我们有一些带有静态方法的辅助类。在实际的测试用例中,我们设置了selenium对象并将对象传递给静态方法,以便它可以对它进行操作。
public BaseHelper
{
public static login( final String username, final String password, final DefaultSelenium selenium )
{
selenium.type("userName", username);
selenium.type("password", password);
selenium.click("loginbutton");
}
}
public LoginTest
{
DefaultSelenium selenium;
onSetup()
{
selenium = new DefaultSelenium(...);
}
public testLogin()
{
BaseHelper.login( "admin", "admin", selenium);
// assert that this passed
BaseHelper.login( "foo", "bar", selenium);
// assert this failed because no user 'foo'
BaseHelper.login( "admin", "bar", selenium);
// assert this failed because admin's password was incorrect
}
}
希望这说明了这一点。
除了更好的可读性和更容易的维护之外,您还可以通过创建两个(或更多)selenium对象并在测试中传递它们来测试多用户行为。
答案 1 :(得分:1)
如何在A类中初始化selenium对象?你还记得从它在B级创建它的地方传递它吗?如果这是它的工作方式,那就很难看出代码的这一部分何时不包括在内......