【问题标题】:org.testng.TestNGException: An error occurred while instantiating class. Check to make sure it can be instantiated/accessedorg.testng.TestNGException:实例化类时发生错误。检查以确保它可以被实例化/访问
【发布时间】:2020-04-01 21:12:05
【问题描述】:

我正在使用 java、TestNG 和 maven 编写一个 selenium 脚本。在使用页面对象模型之前,一切正常。使用 POM 后,我收到以下错误:

org.testng.TestNGException: 实例化类 YieldStreetCartAutomation.SauceDemo.Login 时出错。检查以确保它可以被实例化/访问。 在 org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:134) 在 org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79) 在 org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:109) 在 org.testng.internal.ClassImpl.getInstances(ClassImpl.java:167) 在 org.testng.TestClass.getInstances(TestClass.java:102) 在 org.testng.TestClass.initTestClassesAndInstances(TestClass.java:82) 在 org.testng.TestClass.init(TestClass.java:74) 在 org.testng.TestClass.(TestClass.java:39) 在 org.testng.TestRunner.initMethods(TestRunner.java:459) 在 org.testng.TestRunner.init(TestRunner.java:338) 在 org.testng.TestRunner.init(TestRunner.java:291) 在 org.testng.TestRunner.(TestRunner.java:222) 在 org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33) 在 org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66) 在 org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55) 在 org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676) 在 org.testng.SuiteRunner.init(SuiteRunner.java:178) 在 org.testng.SuiteRunner.(SuiteRunner.java:112) 在 org.testng.TestNG.createSuiteRunner(TestNG.java:1275) 在 org.testng.TestNG.createSuiteRunners(TestNG.java:1251) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1100) 在 org.testng.TestNG.runSuites(TestNG.java:1039) 在 org.testng.TestNG.run(TestNG.java:1007) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

这是我的基础测试

package YieldStreetCartAutomation.SauceDemo;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

public class BaseTest {

public  WebDriver driver;

    @BeforeSuite
    public void setup() {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\viral\\Downloads\\chromedriver_win32 (1)\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://www.saucedemo.com/");
        driver.manage().window().maximize();

}


    @AfterSuite
    public void teardown() {
        driver.close();
    }
}

这是我的主程序:

   package YieldStreetCartAutomation.SauceDemo;

import java.util.List;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.apache.commons.lang3.RandomStringUtils;


public class Login extends BaseTest
{



public Login(WebDriver driver){
    this.driver = driver;
    PageFactory.initElements(driver, this);

}


@FindBy(id = "user-name")
WebElement username;
@FindBy(id = "password")
WebElement password;
@FindBy(className = "btn_action")
WebElement submit;
@FindBy(css = "div#shopping_cart_container>a>svg>path")
WebElement cart;
@FindBy(css = "div.cart_footer :last-child")
WebElement checkout;
@FindBy(id = "first-name")
WebElement firstname;
@FindBy(id = "last-name")
WebElement lastname;
@FindBy(id = "postal-code")
WebElement zip;
@FindBy(xpath = "//input[@value='CONTINUE']")
WebElement cont;
@FindBy(css = "div.cart_footer :last-child")
WebElement finish;
@FindBy(css = "div.bm-burger-button>button")
WebElement menu;
@FindBy(id = "logout_sidebar_link")
WebElement logout;

String thankyou;

    @BeforeMethod
    public void Logon() {
        username.sendKeys("standard_user");
        password.sendKeys("secret_sauce");
        submit.click();
    }

    @Test
    public void cart() {
        String title = driver.getTitle();
        System.out.println(title);
        List<WebElement> button = driver.findElements(By.xpath("//button[text()='ADD TO CART']"));
        for(WebElement bt : button) {
            bt.click();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            }
        cart.click();
        checkout.click();
        firstname.sendKeys(RandomStringUtils.randomAlphabetic(5));
        lastname.sendKeys(RandomStringUtils.randomAlphabetic(5));
        zip.sendKeys(RandomStringUtils.randomNumeric(5));
        cont.click();
        finish.click();
        thankyou = driver.findElement(By.cssSelector("h2.complete-header")).getText();
        Assert.assertEquals(thankyou, "THANK YOU FOR YOUR ORDER");

        }


    @AfterMethod
    public void logout() {
        menu.click();
        WebElement logout = driver.findElement(By.id("logout_sidebar_link"));
        logout.click();

    }


}

POM.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>YieldStreetCartAutomation</groupId>
  <artifactId>SauceDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>SauceDemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.0</version>
</dependency>
<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
</dependency>
  </dependencies>
</project>

请帮帮我

【问题讨论】:

  • 你的 pom.xml?以及如何执行测试?是指按类还是使用 testng.xml 或我使用 mvn 命令?
  • 我正在使用 testng.xml 并且我已经附加了 POM.xml
  • ttps://testng.org/testng-1.0.dtd" rel="nofollow" target="_blank">testng.org/testng-1.0.dtd" >

标签: java maven selenium testng


【解决方案1】:

这可能会有所帮助。我用 TestNG/Selenium 创建了一个类似的 Maven 项目,但有以下区别

更改为 POM

<!-- Using TestNG so removing jUnit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> -->

父类

import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;


public class AppTestBase {

    public RemoteWebDriver driver = null;

    @BeforeSuite
    public void setUp() {
        try {
            URL url = new URL("http://localhost:4444/wd/hub");
            DesiredCapabilities caps = DesiredCapabilities.chrome();
            driver = new RemoteWebDriver(url, caps);
        } catch (Exception e) {
            System.out.print("Exception " + e.getMessage());
        }
    }

    @AfterSuite
    public void tearDown() {
        driver.close();
    }

}

测试类

import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;

/**
 * Test that uses PageFactory
 */
public class AppTestInstance
extends AppTestBase {

    // PageFactory will set all these when the page is loaded
    @FindBy(id = "username")         WebElement username;
    @FindBy(id = "password")         WebElement password;
    @FindBy(id = "login")            WebElement loginbtn;

    @Test public void shouldLogin() {
        driver.get("http://testserver/login");

        PageFactory.initElements(driver, this);

        username.sendKeys("ausername");
        password.sendKeys("apassword");
        loginbtn.click();
    }    
}

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2019-09-16
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多