Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium脚本使用TestNG注释失败_Java_Selenium_Testng - Fatal编程技术网

Java Selenium脚本使用TestNG注释失败

Java Selenium脚本使用TestNG注释失败,java,selenium,testng,Java,Selenium,Testng,步骤: 1.在eclipse中,我创建了一个名为“ForSe”的新项目 在“src”文件夹下→ '默认包“我创建了一个名为Login.java的类 我在这个类中的代码如下: public class Login_Valid { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chr

步骤: 1.在eclipse中,我创建了一个名为“ForSe”的新项目

  • 在“src”文件夹下→ '默认包“我创建了一个名为
    Login.java
    的类

  • 我在这个类中的代码如下:

    public class Login_Valid {      
        public static void main(String[] args) throws InterruptedException {                
            System.setProperty("webdriver.chrome.driver","*my path*");
            WebDriver driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("*URL of prject ForSe*");
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            driver.findElement(By.xpath("//*@id='email_address']")).sendKeys("*email address*");
            driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
            driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
        }
    }
    
  • 当我使用
    以java应用程序运行时,脚本运行得非常好。
    但是,当我对TestNG使用相同的脚本时,它会跳过/失败我的测试。

    创建TestNG脚本所采取的步骤如下:

    public class ForSe_TestCases 
    {
        WebDriver driver;
        String url = "*project's URL*";
    
        @Test (priority = 0)
        public void IO_login(WebDriver driver) 
        {
    
            //ForSe test environment URL
            driver.navigate().to(url);
    
            //this is official email address of IO
            driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
    
            //this is password
            driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
    
            //click on submit button to login
            driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
            System.out.println("Login button pressed");
        }
    
        @BeforeTest
        public void setup() 
        {
            // Set property for Chrome
            System.setProperty("webdriver.chrome.driver","*my path*");
            WebDriver driver = new ChromeDriver();
    
            //apply implicit wait
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
            //maximize window
            driver.manage().window().maximize();
        }
    }
    
  • 已安装TestNG,并在相同的
    src
    下为SE_TestCases.java创建一个名为
    的新包
  • 我的TestNG脚本如下所示:

    public class ForSe_TestCases 
    {
        WebDriver driver;
        String url = "*project's URL*";
    
        @Test (priority = 0)
        public void IO_login(WebDriver driver) 
        {
    
            //ForSe test environment URL
            driver.navigate().to(url);
    
            //this is official email address of IO
            driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
    
            //this is password
            driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
    
            //click on submit button to login
            driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
            System.out.println("Login button pressed");
        }
    
        @BeforeTest
        public void setup() 
        {
            // Set property for Chrome
            System.setProperty("webdriver.chrome.driver","*my path*");
            WebDriver driver = new ChromeDriver();
    
            //apply implicit wait
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
            //maximize window
            driver.manage().window().maximize();
        }
    }
    
  • 我无法理解我在哪一步出错。这是我通过
    runastestng运行测试时收到的错误消息

        [Utils] [ERROR] [Error] org.testng.TestNGException:
        Cannot inject @Test annotated Method [IO_login] with [interface org.openqa.selenium.WebDriver].
    
        ===============================================
        Default test
            Tests run: 1, Failures: 1, Skips: 0
        ===============================================
        ===============================================
        Default suite
        Total tests run: 1, Failures: 1, Skips: 0
        ===============================================
    

    更改代码行下方的内容。

    public void IO\u登录(WebDriver驱动程序)
    public void IO\u登录()

    然后试着运行你的代码,它肯定会对你有用。有关此代码的更多详细信息,请参阅以下代码

    public class ForSe_TestCases {
        
        WebDriver driver;
        String url = "http://google.com";
    
      @Test (priority = 0)
      public void IO_login() 
      {
           driver.navigate().to(url);
           System.out.println("Login Method");
      }
    
      @BeforeTest
      public void setup()
      {
          System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
          driver = new ChromeDriver();
          driver.manage().window().maximize();
          driver.manage().timeouts().implicitlyWait(25, TimeUnit.SECONDS);    
      }
    }
    

    这些可能是一些问题:

  • “我的路径”不是有效的变量名。将其更改为“我的路径”

  • 定义一个
    字符串my_path=“C:\\Utility\\BrowserDrivers\\chromedriver.exe”作为全局变量

  • 提供
    System.setProperty(“webdriver.chrome.driver”、“my_path”)时检查变量

  • 不要使用
    driver.manage().window().maximize()改为使用选项类处理它

  • WebDriver-driver
    是在类级别全局定义的,您不必在
    IO\u login()中将其作为参数传递

  • 检查此代码:

    public class TestAnyURL_TestNG
    {
    WebDriver driver;
    String url = "http://google.com";
    String my_path = "C:\\Utility\\BrowserDrivers\\chromedriver.exe";
    
    @Test (priority = 0)
    public void IO_login() 
    {
    
        //ForSe test environment URL
        driver.navigate().to(url);
    
        //this is official email address of IO
        driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
    
        //this is password
        driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
    
        //click on submit button to login
        driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
        System.out.println("Login button pressed");
    }
    
    @BeforeTest
    public void setup() 
    {
        System.setProperty("webdriver.chrome.driver", my_path);
        ChromeOptions options = new ChromeOptions();
        options.addArguments("test-type");
        options.addArguments("start-maximized");
        options.addArguments("--js-flags=--expose-gc");  
        options.addArguments("--enable-precise-memory-info"); 
        options.addArguments("--disable-popup-blocking");
        options.addArguments("--disable-default-apps");
        options.addArguments("test-type=browser");
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);        
    }
    }
    
  • 记住:

  • 替换
    http://google.com
    使用您自己的
    测试URL

  • 包演示
    替换为
    包您的包名

  • public class TestAnyURL\u TestNG替换为
    public class\u class\u name

  • 作为“TestNG测试”运行

  • 更新我的状态


  • 请用下面的代码替换您的代码,然后再试一次,我在我的机器上测试了它

    import org.testng.annotations.Test;
    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.annotations.BeforeTest;
    
    public class Testngtest 
    {
    WebDriver driver;
    String url = "*project's URL*";
    
    @Test (priority = 0)
    public void IO_login() 
    {
    
        //ForSe test environment URL
        driver.navigate().to("Url");
    
        //this is official email address of IO
        driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
    
        //this is password
        driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
    
        //click on submit button to login
        driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
        System.out.println("Login button pressed");
    }
    
    @BeforeTest
    public void setup() 
    {
        // Set property for Chrome
    
        System.setProperty("webdriver.chrome.driver","*my path*");
    
        driver = new ChromeDriver();
    
        //apply implicit wait
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    
        //maximize window
        driver.manage().window().maximize();
    }
    }
    
    下面是我对原始代码所做的更改

    1.删除IO_登录方法()的驱动程序参数

    2.再次删除了setup方法中的web驱动程序声明,我们已经在类内部和所有方法外部声明了它


    如果您有任何疑问,请告诉我。

    问题在于TestNG的设置。以下代码解决了我的问题:

    @BeforeTest
    public void setup() 
    {
        System.setProperty("webdriver.chrome.driver", my_path);
        ChromeOptions options = new ChromeOptions();
        options.addArguments("test-type");
        options.addArguments("start-maximized");
        options.addArguments("--js-flags=--expose-gc");  
        options.addArguments("--enable-precise-memory-info"); 
        options.addArguments("--disable-popup-blocking");
        options.addArguments("--disable-default-apps");
        options.addArguments("test-type=browser");
        options.addArguments("disable-infobars");
        driver = new ChromeDriver(options);        
    }
    

    对试过了,但结果还是一样。它打开浏览器将URL
    数据;()
    并立即失败。当我执行上述代码时,它工作正常,没有显示任何错误。我猜在你的情况下,你的chrome驱动程序被破坏了。从这个站点下载最新的chrome驱动程序,然后执行我的代码。我尝试了最新的chrome驱动程序。还是不行。我确信它不是chrome驱动程序,因为当我以java应用程序运行时,脚本工作正常。你是否正确地替换了我的代码?您使用的是哪个版本的selenium webdriver?chrome浏览器版本?请传递您的错误消息。您能解释一下为什么我不使用
    driver.manage().window().maximize()