无法在TestNG中执行第二个@Test方法
未能点击以下代码段的method2()无法在TestNG中执行第二个@Test方法,testng,Testng,未能点击以下代码段的method2() public class project { static WebDriver driver; @Test() public void method1() { System.setProperty("webdriver.chrome.driver","C:\\Users\\52013597\\Desktop\\Selenium\\chromedriver.exe"); WebDriver
public class project
{
static WebDriver driver;
@Test()
public void method1()
{
System.setProperty("webdriver.chrome.driver","C:\\Users\\52013597\\Desktop\\Selenium\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("url");
}
@Test()
public void method2()
{
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[@id=\"login-panel\"]/div[2]/form/div[3]/input")).clear();
driver.findElement(By.xpath("//*[@id=\"login-panel\"]/div[2]/form/div[3]/input")).sendKeys("TOYVA30U5VC");
}
}
[RemoteTestNG]检测到TestNG版本6.14.2
在端口10902上启动ChromeDriver 2.38.551601(edb21f07fc70e9027c746edd3201443e011a61ed)
只允许本地连接。
2018年8月8日晚上8:13:37 org.openqa.selenium.remote.ProtocolHandshake createSession
信息:检测到的方言:OSS
通过:方法1
失败:方法2
java.lang.NullPointerException
在Framework1.project.method2(project.java:24)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(未知源)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(未知源)
位于java.base/java.lang.reflect.Method.invoke(未知源)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
位于org.testng.internal.Invoker.invokeMethod(Invoker.java:580)
位于org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
位于org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
位于org.testng.TestRunner.privateRun(TestRunner.java:648)
位于org.testng.TestRunner.run(TestRunner.java:505)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:450)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
运行(SuiteRunner.java:364)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
在org.testng.testng.runSuitesSequentially上(testng.java:1208)
位于org.testng.testng.runSuitesLocally(testng.java:1137)
位于org.testng.testng.runSuites(testng.java:1049)
位于org.testng.testng.run(testng.java:1017)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
===============================================
默认测试
测试运行:2,失败:1,跳过:0
===============================================
默认套件
运行的测试总数:2,失败数:1,跳过数:0您缺少
驱动程序
对象,请添加到方法2:
WebDriver driver = new ChromeDriver();
或者将此语句从method1移动到类级别。您必须在多个位置定义Webdriver,而必须在@Test method中将对象值初始化为driver
public class project
{
static WebDriver driver;
@Test()
public void method1()
{
System.setProperty("webdriver.chrome.driver","C:\\Users\\52013597\\Desktop\\Selenium\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("url");
}
@Test()
public void method2()
{
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[@id=\"login-panel\"]/div[2]/form/div[3]/input")).clear();
driver.findElement(By.xpath("//*[@id=\"login-panel\"]/div[2]/form/div[3]/input")).sendKeys("TOYVA30U5VC");
}
}
或者,如果您想在另一个类中重用它,您可以在类级别或不带@Test注释的单独方法中定义它 顺序不保证,因此如果在
method1
之前执行method2
,driver
将为空,并且不会执行work@user7294900但TestNG按照字母顺序执行测试,不是吗?不,根据不,可能是早期版本。看看这个我的演示无论如何这是一个错误的做法假设单元测试的顺序应该/可以作为一个unitdriver对象执行在测试方法2中不可用,因为它是在方法1中本地创建的,您不应该创建新的驱动程序对象,而不是使用静态对象。