2016-08-03 6 views
1

これは状況です。私はQAのオートメーションエンジニアです。現在、私はJenkinsでCIフレームワークを設定していますが、今はMavenに問題があります。 mvn testコマンドを実行しようとすると、以下のエラーが表示されます。しかし、テストはmavenテストとして実行されているときに、Eclipseで完璧に動作します。Mvn Test cmd lineビルドの失敗、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 

私のクロームシステムのプロパティ/パスに関連しています。私のプロジェクトでは、私はテストパッケージとページオブジェクトパッケージを持っています。私は、オブジェクトクラスで私のクロムシステムプロパティを設定し、そのクラスをテストクラスにインポートします。なぜ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の環境で設定ではなく、あなたのOS上で、そのコマンドラインは、それを拾うていないされています。 Eclipseの設定を確認して、Mavenの実行コンフィギュレーションから始めましょう。 – Tunaki

+0

どのようにテストを行っていますか? through XML? –

+0

はい私はxmlを通してテストを実行していました。いくつかの掘り下げをした後、私は環境変数PATHにdriver.exeファイルへのパスを入れることに気付きました。だから私はそれをしました。それが何かをしたら100%ではありませんでした。 – Lamar

答えて

0

以下のテストクラスを参照してください。 LoginPageにはメインのメソッドがあります。これはドライバのインスタンス化を行います。主な方法はどこから呼び出されていますか?あなたのbeforetestには、testngによって呼び出されるドライバインスタンス化コードもありますが、chromedriverプロパティを設定していません。

理想的には、ドライバーのインスタンスコードは1か所に書かれ、残りのテストケースから消費されるのが理想的です。

+0

これは問題でした。私はシステムプロパティを設定するメソッドを呼び出すことはありませんでした。いったんmvnテストのcmdがうまく動作し、テストコード内のドライバのインスタンス化が冗長だったとしたら、どうもありがとう ! – Lamar

関連する問題