2016-07-22 6 views
0

Excelシートからデータを取り出し、ログインフィールドとパスワードに渡しますWebアプリケーション用のフィールドですが、エラーが発生しています。Selenium Webdriver、TestNG - データプロバイダが2つのパラメータを渡そうとしていますが、メソッドが3をとり、TestNGが適切なオブジェクトを挿入できません。

私は、次のエラーを取得しています:後

org.testng.TestNGException: 
The data provider is trying to pass 2 parameters but the method  com.access.Curam#setUp takes 3 and TestNG is unable in inject a suitable object 

は、私は、プロパティファイルに保存するXPathです:

私はExcelファイルでテストデータを保持する方法
URL = https://testexample.com 
Email = //*[@id='j_username'] 
Pwd = html/body/div[2]/form/input[2] 
Submit = html/body/div[2]/a/span/span/span 
WellCometoTestingWorld = //*[@id='app-banner']/div[1]/div/h2 

そして、この:

Column1 Column2 
UserName Password 

次に、私のtestng.xmlファイルを示します。

続き
<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 

<suite name="TestSuite" thread-count="2" parallel="tests" > 

<test name="AllTest"> 

<classes> 

<class name="com.Test1.StartTest"> 

</class> 

</classes> 

</test> 

</suite> 

は私のコードです:

package com.access; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Properties; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.testng.Assert; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
import jxl.Sheet; 
import jxl.Workbook; 

public class Curam { 

    static WebDriver driver; 
    Workbook wb; 
    Sheet sh1; 
    int numrow; 
    String username; 
    String password; 


    @Test(dataProvider = "testdata") 
    public void setUp(ArrayList<String> sqldata, String uname, String password1) 
      throws InterruptedException, FileNotFoundException, IOException 

    { 
     System.setProperty("webdriver.chrome.driver", "C:\\Directory\\chromedriver.exe"); 
     driver = new ChromeDriver(); 

     Properties obj = new Properties(); 
     System.out.println("data>>>>>>"+sqldata); 
     FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\\src\\com\\access\\Object.Properties"); 
     obj.load(objfile); 
     driver.get(obj.getProperty("URL")); 
     driver.manage().window().maximize(); 
     Thread.sleep(1000); 
     driver.findElement(By.xpath(obj.getProperty("Email"))).clear(); 
     Thread.sleep(1000); 
     driver.findElement(By.xpath(obj.getProperty("Email"))).sendKeys(uname); 
//  Thread.sleep(1000); 
//  driver.findElement(By.xpath("//*[@id='next']")).click(); 
     Thread.sleep(1000); 
     driver.findElement(By.xpath(obj.getProperty("Pwd"))).clear(); 
     Thread.sleep(1000); 
     driver.findElement(By.xpath(obj.getProperty("Pwd"))).sendKeys(password1); 
     Thread.sleep(1000); 
     driver.findElement(By.xpath(obj.getProperty("Submit"))).click(); 
     Thread.sleep(1000); 
     Assert.assertEquals("Well Come to Testing World", driver.findElement(By.xpath(obj.getProperty("WellCometoTestingWorld"))).getText()); 
    } 

    @DataProvider(name = "testdata") 
    public Object[][] TestDataFeed() { 

     try { 

      // load workbook 
      wb = Workbook.getWorkbook(new File("C://File//Book3.xls")); 

      // load sheet in my case I am referring to first sheet only 
      sh1 = wb.getSheet(0); 

      // get number of rows so that we can run loop based on this 
      numrow = sh1.getRows(); 
     } catch (Exception e) 

     { 
      e.printStackTrace(); 
     } 

     // Create 2 D array and pass row and columns 
     Object[][] logindata = new Object[numrow][sh1.getColumns()]; 

     // This will run a loop and each iteration it will fetch new row 
     for (int i = 0; i < numrow; i++) { 

      // Fetch first row username 
      logindata[i][0] = sh1.getCell(0, i).getContents(); 
      // Fetch first row password 
      logindata[i][1] = sh1.getCell(1, i).getContents(); 

     } 

     // Return 2d array object so that test script can use the same 
     return logindata; 

    } 

} 
+0

を役に立てば幸い

public void setUp(String uname, String password1) throws InterruptedException, FileNotFoundException, IOException 

の下のようなあなたの設定方法を変更する失敗しているsetupmethodする2つのパラメータを注入しようとすると@Test(dataProvider = "testdata") \t public void loginVerify(ArrayList sqldata、String uname、String password1)コードでは、3番目のパラメータとして「ArrayList sqldata」を考慮しています。なぜコードexe "エラーメッセージを投げる" org.testng.TestNGException: データプロバイダが2つのパラメータを渡そうとしていますが、com.access.Curam#loginVerifyメソッドが3で、TestNGが適切なオブジェクトをインジェクトでき​​ませんでした。 – Curious

答えて

0

TestNGのは、あなたの試験方法(セットアップ)にデータプロバイダメソッド(TestDataFeed)からのテストデータを注入しようとします。データプロバイダメソッドでは、ユーザ名とパスワードという2つのカラムを設定しています。 TestNGは、2次元オブジェクト配列を検査することによってそれを判定します。

TestNGのは、それは3つのパラメータを見て、そう、これは私がエラーからの私の分析は何

+0

Kaarthick Rama Moorthy - 私はsetUpメソッドが2のinstedの3を探していることを知っていますが、私はxpathをプロパティフォルダに保存していますので、エディタ自体でxpathを言及する。プロパティファイルにxpathを保持するには、setUpメソッドのパラメータ自体にArrayListを宣言する必要があります。それ以外のところでsetUpメソッドのArrayList instedを宣言できますか? – Curious

関連する問題