2016-08-03 90 views
1

这是情况。我是QA自动化工程师,现在我负责在Jenkins建立CI框架,但现在我遇到了Maven问题。当我尝试运行mvn test命令时,出现以下错误。然而,当作为maven测试运行时,测试在eclipse中完美地工作。Mvn测试cmd行构建失败,Eclipse中的测试工作

T E S T S 
------------------------------------------------------- 
Running TestSuite 
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configur 
[email protected] 
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configur 
[email protected] 
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(); 


    } 

} 
+0

因此,也许'webdriver.chrome.driver'属性是在您的Eclipse环境中设置的,但不是在您的操作系统上,所以命令行不会选择它。检查你的Eclipse首选项,我将从Maven运行配置开始。 – Tunaki

+0

你如何运行你的测试?通过XML? –

+0

是的,我正在通过xml运行测试。在做了一些挖掘之后,我发现你要把path.exe文件放到你的环境变量PATH中。所以我这样做了,不是100%确定这是否做了什么(做了那个和其他一些行动),但我怀疑它做了。 – Lamar

回答

0

测试类的测试的结构似乎不正确。你在LoginPage中有一个主要的方法 - 正在做驱动实例化。主要方法从哪里调用?你的beforetest也有一个由testng调用的驱动实例代码,但是你没有设置chromedriver属性。

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

+0

这是问题所在,我从来没有在设置系统属性的方法中调用,一旦我做了我的mvn测试cmd工作正常,并且测试代码中的驱动程序实例化是多余的。非常感谢 ! – Lamar