【发布时间】: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