簡體   English   中英

如何成功傳遞此代碼? Java Webdriver TestNg

[英]How can I pass this code successfully? Java Webdriver TestNg

我想將此代碼傳遞給我的其他班級,這樣我就不必繼續粘貼它。

這是包含代碼的類:

package utility;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class BrowserType {
    public static WebDriver driver;

    @Parameters("browser")
    @Test
    public static void CallBrowser(String browser) {

        if(browser.equalsIgnoreCase("firefox")) {

              driver = new FirefoxDriver();

          // If browser is IE, then do this   

          }else if (browser.equalsIgnoreCase("chrome")) { 

              // Here I am setting up the path for my IEDriver

              {System.setProperty("webdriver.chrome.driver","C:/Users/elsid/Desktop/Eclipse/Selenium/chromedriver.exe");}
               driver = new ChromeDriver();

              driver.get(Constant.URL);

          } 

    }
}

我想將CallBrowser傳遞給下面的SetUp

package automationFramework;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import utility.Constant;
import appModule.SignIn_Action;

public class SignIn {

    public WebDriver driver;



@BeforeMethod
@Parameters("browser")
public void SetUp(String browser) {

     if(browser.equalsIgnoreCase("firefox")) {

          driver = new FirefoxDriver();

      // If browser is Chrome, then do this   

      }else if (browser.equalsIgnoreCase("chrome")) { 

          { System.setProperty("webdriver.chrome.driver","C:/Users/elsid/Desktop/Eclipse/Selenium/chromedriver.exe");}
          driver = new ChromeDriver();

          { driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);}
          {driver.manage().window().maximize();}
           driver.get(Constant.URL);
      }
      } 

@Test
public  void signIn() {

    SignIn_Action.Execute(driver, Constant.DevStudentUsername, Constant.DevStudentPassword);      
 }  

@AfterMethod
public void Teardown() {
    driver.quit();

} 

  }

我嘗試僅調用靜態類,但是@BeforeMethod配置錯誤,我敢肯定我在傳遞驅動程序和參數時做錯了。

有人可以解釋一下我需要對兩個類進行的更改才能使其正常工作嗎?

這些是錯誤:

FAILED CONFIGURATION: @AfterMethod Teardown
java.lang.NullPointerException
    at automationFramework.SignIn.Teardown(SignIn.java:38)
    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 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:786)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    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)

FAILED: signIn
java.lang.NullPointerException
    at appModule.SignIn_Action.Execute(SignIn_Action.java:27)
    at automationFramework.SignIn.signIn(SignIn.java:33)
    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 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    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)


===============================================
    Default test
    Tests run: 1, Failures: 1, Skips: 0
    Configuration Failures: 1, Skips: 0
===============================================


===============================================
Suite
Total tests run: 1, Failures: 1, Skips: 0
Configuration Failures: 1, Skips: 0
===============================================

這就是我試圖調用代碼的方式:

public WebDriver driver;



@BeforeMethod
@Parameters("browser")
public void SetUp(String browser) {

     BrowserType.CallBrowser(browser);
      } 

您的問題是,在調用拆解時未初始化驅動程序。 您需要確保在所有情況下都將其初始化。 我將使用調試器來檢查您的代碼,並檢查以確保當您按下setup和teardown方法時,驅動程序實際上是在安裝時初始化的,並且在拆卸時存在。 事情運行時,您還會有兩個驅動程序。 一個是您在代碼的第一部分中聲明的靜態驅動程序,然后在實際測試中還有另一個非靜態驅動程序。 我會修復該問題,因為這可能會引起問題。

解決問題的最簡單方法是確保在安裝過程中始終對驅動程序進行初始化,即使該字符串與任一選項都不匹配也是如此。

public void SetUp(String browser) {

     if(browser.equalsIgnoreCase("firefox")) {

          driver = new FirefoxDriver();

      // If browser is Chrome, then do this   

      }else { 

          System.setProperty("webdriver.chrome.driver","C:/Users/elsid/Desktop/Eclipse/Selenium/chromedriver.exe");
          driver = new ChromeDriver();

          { driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);}
          {driver.manage().window().maximize();}
           driver.get(Constant.URL);
      }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM