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.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();
        }
    }
    
  • 当我使用 run as java application 运行时,脚本运行得非常好。 但是当我在 TestNG 中使用相同的脚本时,它会跳过/失败我的测试。

    创建 TestNG 脚本的步骤如下:

    1. 已安装 TestNG 并在同一 src 下创建一个名为 ForSe_TestCases.java 的新包
    2. 我的 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();
          }
      }
      

    我无法理解我在哪一步出错了。这是我通过 Run as TestNG

    运行测试时收到的错误消息
        [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_login(WebDriver driver)public void IO_login()

    然后尝试运行您的代码,它一定会对您有用。有关这方面的更多详细信息,请参阅下面的代码。

    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);    
      }
    }
    

    关于java - Selenium 脚本因 TestNG 注释而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132924/

    相关文章:

    java - 我的 return 语句不使用用户插入的数据

    java - JPA、 hibernate 、postgreSQL : Unable to build Hibernate SessionFactory

    java - 文件类对象在服务器java中运行时不会删除文件

    python - 无法在下拉列表中向下导航,使用 Python 在 Selenium webdriver 中使用 keys.ARROW_DOWN

    firefox - Selenium IDE gotoIF 比较 vchar 字符串

    java - allure2 监听器输出控制台中的步骤

    java - 字符串不包含实体,但显示它,并且表示在替换时不会改变

    Spring Test + Mockito.mock - Spring 失败,因为它尝试加载模拟 bean @Autowired 依赖项

    maven - 测试卡在 Configuring TestNG with : TestNG652Configurator

    java - 为什么 https ://username:password@example. com 不起作用?