2016-07-22 2 views
0

Ich versuche, Daten aus dem Excel-Blatt zu ziehen und diese Testdaten im Login-Feld und Passwort zu übergeben Feld für Web-Anwendung, aber ich bekomme Fehler.Selenium Webdriver, TestNG - Datenprovider versucht, 2 Parameter zu übergeben, aber die Methode dauert 3 und TestNG kann kein geeignetes Objekt injizieren

ich folgende Fehler bekommen:

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 

Es folgen XPath Ich hielt in der Eigenschaft File:

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 

Und dies, wie ich immer Testdaten in der Excel-Datei:

Column1 Column2 
UserName Password 

Und folgendes ist meine Datei 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> 

Es folgen Mein Code:

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

unten ändern Was mir von dem Fehler meiner Analyse dass ich drei Parameter in der Methode zur Verfügung stellte, wie unten: @Test (DataProvider = "testdata") \t public void loginVerify (ArrayList sqldata, Zeichenfolge uname, String password1) Wo Codes "ArrayList sqldata" als dritten Parameter berücksichtigen Deshalb Codes exe cution throw Fehlermeldung "org.testng.TestNGException: Der Datenprovider versucht, 2 Parameter zu übergeben, aber die Methode com.access.Curam # loginVerify dauert 3 und TestNG kann kein geeignetes Objekt injizieren". – Curious

Antwort

0

TestNG versucht Testdaten von Dataprovider-Methode (TestDataFeed), um Ihre Testmethode (Setup) zu injizieren. In Ihrer Datenanbietermethode haben Sie zwei Spalten konfiguriert, nämlich den Benutzernamen und ein Passwort. TestNG ermittelt es, indem es das zweidimensionale Objektarray überprüft.

Wenn TestNG versucht 2 Parameter zu injizieren setupmethod, es sieht drei Parameter und es versagt, so dass Ihre Setup-Methode wie

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

hoffte, das hilft

+0

Kaarthick Rama Moorthy - Ich weiß, dass setUp-Methode sucht nach 2 Parameter statt 3 aber wie ich meine Xpath in der Eigenschaft Datei unter dem Paketordner gespeichert, so dass, wenn erfordern, dann liest mein Code xpath aus Eigenschaftendatei, wie ich nicht will um XPath im Editor selbst zu erwähnen. Um xpath in der Eigenschaftendatei zu behalten, muss ich ArrayList im Parameter selbst in der Methode setUp deklarieren. Wissen Sie, wo ich sonst ArrayList in der Methode setUp deklarieren kann? – Curious

Verwandte Themen