Mvn Test cmd行构建失败,Eclipse中的测试工作

时间:2016-08-03 20:35:10

标签: java maven selenium automated-tests

这是情况。我是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为什么会遇到这个问题。请参阅下面的示例对象和测试类

Page Class

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


    }

}

1 个答案:

答案 0 :(得分:0)

您的测试结构似乎不正确。你在LoginPage中有一个main方法 - 它正在进行驱动程序实例化。调用的主要方法在哪里?你的beforetest还有一个驱动程序实例化代码,由testng调用,但你没有设置chromedriver属性。

理想情况下,驱动程序实例化代码应该写在一个地方,并从其他测试用例中使用。