这就是这种情况。我是一名QA自动化工程师,现在负责在Jenkins中设置我们的CI框架,但现在我遇到了有关Maven的问题。当我尝试运行mvn test命令时,出现以下错误。但是,当作为maven测试运行时,这些测试在Eclipse中可以完美地工作。
T E S T S
-------------------------------------------------------
Running TestSuite
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configur
ator@3830f1c0
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configur
ator@bd8db5a
Tests run: 16, Failures: 1, Errors: 0, Skipped: 14, Time elapsed: 0.66 sec <<< F
AILURE!
beforeTest(fcstestingsuite.fsnrgn.LoginTest) Time elapsed: 0.442 sec <<< FAILU
RE!
java.lang.IllegalStateException: The path to the driver executable must be set b
y the webdriver.chrome.driver system property; for more information, see https:/
/github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be dow
nloaded from http://chromedriver.storage.googleapis.com/index.html
at com.google.common.base.Preconditions.checkState(Preconditions.java:19
9)
at org.openqa.selenium.remote.service.DriverService.findExecutable(Drive
rService.java:109)
at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDrive
rService.java:32)
at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExe
cutable(ChromeDriverService.java:137)
at org.openqa.selenium.remote.service.DriverService$Builder.build(Driver
Service.java:296)
at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(C
hromeDriverService.java:88)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:116)
at fcstestingsuite.fsnrgn.LoginTest.beforeTest(LoginTest.java:54)
Results :
Failed tests: beforeTest(fcstestingsuite.fsnrgn.LoginTest): The path to the dr
iver executable must be set by the webdriver.chrome.driver system property; for
more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
The latest version can be downloaded from http://chromedriver.storage.googleapis
.com/index.html
Tests run: 16, Failures: 1, Errors: 0, Skipped: 14
如您所见,它与我的Chrome系统属性/路径有关。在我的项目中,我有一个测试包和页面对象包。我在对象类中设置了chrome系统属性,然后将该类导入到在Eclipse中正常工作的测试类中。我不太确定为什么Maven对此有疑问。请参阅下面的示例对象和测试类
页面类
package pageobjectfactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
import org.testng.Assert;
// URL = http://www.ourfsn.com/myfsn/
public class Ourfsnlogin {
@FindBy(id="ctl00_ContentPlaceHolder1_tbxUname")
WebElement login;
@FindBy(id="ctl00_ContentPlaceHolder1_tbxPword")
WebElement password;
@FindBy(id="ctl00_ContentPlaceHolder1_btnSubmit")
WebElement submit;
@FindBy(name="ctl00$ContentPlaceHolder1$rptAccounts$ctl01$AccountSwitch")
WebElement PETSMARTUS;
@FindBy(name="ctl00$ContentPlaceHolder1$rptAccounts$ctl02$AccountSwitch")
WebElement PETSMARTCAD;
@FindBy(name="ctl00$ContentPlaceHolder1$rptAccounts$ctl03$AccountSwitch")
WebElement PETSMARTPR;
@FindBy(id="ctl00_lblTopLogin")
WebElement PETSMARTUSASSERT;
@FindBy(id="ctl00_lblTopLogin")
WebElement PETSMARTCAASSERT;
@FindBy(id="ctl00_lblTopLogin")
WebElement PETSMARTPRASSERT;
@FindBy(id="ctl00_Menu1_16")
WebElement LogoutButton;
public static WebDriver driver;
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","C:\\Users\\dmohamed\\Documents\\Testing Environment\\Testing Environment\\Web Drivers\\chromedriver_win32 (1)\\chromedriver.exe");
WebDriver chromedriver = null; new ChromeDriver();
driver= chromedriver;
}
//Send user name in textbox
public void sendUserName(String strUsername){
login.sendKeys("ebluth");}
public void sendUserNameServiceCenter(String strUsername){
login.sendKeys("servicecenter");}
public void sendUserNameSP(String strUsername){
login.sendKeys("4328701");
}
//Send Password
public void sendPassword(String strPassword){
password.sendKeys("password");}
//submitting credentials
public void clicksubmit(){
submit.click();}
//Checking US PAge
public void USAssertion(){
PETSMARTUS.isEnabled();
}
//Checking CAD page
public void CAAssertion(){
PETSMARTCAD.isEnabled();}
//Checking PR Page
public void PRAssertion(){
PETSMARTPR.isEnabled();}
//click us link
//Checking US PAge
public void USclick(){
PETSMARTUS.click();
}
//Checking CAD page
public void CAclick(){
PETSMARTCAD.click();}
//Checking PR Page
public void PRclick(){
PETSMARTPR.click();}
//Click on
public void USPageValidation(){
Assert.assertTrue(PETSMARTUSASSERT.getText().contains("PETM-US"), "Incorrect Page [US,CA,PR]");
}
public void PRPageValidation(){
Assert.assertTrue(PETSMARTPRASSERT.getText().contains("PETM-PR"),"Incorrect Page [US,CA,PR]");
}
public void CAPageValidation(){
Assert.assertTrue(PETSMARTCAASSERT.getText().contains("PETM-CN"),"Incorrect Page [US,CA,PR]");
}
//Log out
public void Logout (){
LogoutButton.click();
}}
Test Class
package fcstestingsuite.fsnrgn;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import pageobjectfactory.Ourfsnlogin;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
public class LoginTest {
static WebDriver driver;
Ourfsnlogin LoginPage;
@Test (priority=1)
public void USPageTest() {
LoginPage.sendUserName("ebluth");
LoginPage.sendPassword("password");
LoginPage.clicksubmit();
LoginPage.USclick();
LoginPage.USPageValidation();
}
@Test(priority=2)
public void CAPageTest(){
LoginPage.sendUserName("ebluth");
LoginPage.sendPassword("password");
LoginPage.clicksubmit();
LoginPage.CAclick();
LoginPage.CAPageValidation();
}
@Test (priority=3)
public void PRPageTest(){
LoginPage.sendUserName("ebluth");
LoginPage.sendPassword("password");
LoginPage.clicksubmit();
LoginPage.PRclick();
LoginPage.PRPageValidation();
}
@AfterMethod
public void aftermethod(){
LoginPage.Logout();
}
@BeforeTest
public void beforeTest() {
Ourfsnlogin.driver=new ChromeDriver();
//setting global explicit wait
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 20), this);
Ourfsnlogin.driver.get("http://www.ourfsn.com/myfsn");
//initiating elements in page factory
LoginPage= PageFactory.initElements(Ourfsnlogin.driver, Ourfsnlogin.class);
}
@AfterTest
public void afterTest() {
Ourfsnlogin.driver.quit();
}
}
最佳答案
您的测试结构似乎不正确。 LoginPage中有一个主要方法-正在执行驱动程序实例化。主要方法从哪里调用?您的beforetest也有一个驱动程序实例化代码,该代码由testng调用,但是您没有设置chromedriver属性。
理想情况下,驱动程序实例化代码应在一个地方编写,并在其余的测试用例中使用。
关于java - Mvn测试命令行构建失败,在Eclipse中测试正常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38753144/