2017-08-02 1 views
2

bitte unter dem Datentreiber Framework-Code verweisen, wo ich unter Fehlermeldung konfrontiert bin
Datenrahmen Driven - Sendkeys Fehlermeldung - ECLIPSE

Die Methode Sendkeys (CharSequence) in der Art webelement ist nicht anwendbar für die Argumente (int).

Haben sie mit Schlüsselwort als Problem kommentiert.

haben im Web durchsucht, einschließlich Stackoverflow und unten unter Lösungen geteilt werden.

  1. Ändern Sie die Compiler-Version von der alten Version auf 1.5 oder höher. - bereits Compiler-Version größer als 1.5.
  2. Ändern Sie die JRE-Version von JRE8 in JRE7. - habe mit JRE8 & JRE7 versucht, aber immer noch existiert ein Fehler. Siehe Bild unten:

enter image description here

Dies ist der Code:

package datadrivenframework; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.testng.annotations.AfterMethod; 
import org.testng.annotations.Test; 
import org.testng.annotations.DataProvider; 

public class SnapDealLogin 
{ 
    @Test(dataProvider = "ABN")  
    public void Snap_Login(int UserID) throws InterruptedException 
    { 
     System.setProperty("webdriver.chrome.driver","C:\\Users\\hp\\workspace\\Selenium\\browser\\chromedriver.exe"); 
     WebDriver Snap = new ChromeDriver(); 
     Snap.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     Snap.get("https://www.snapdeal.com/"); 
     Thread.sleep(3000); 
     Snap.manage().window().maximize(); 
     Thread.sleep(2000); 
     Snap.findElement(By.xpath(".//*[@id='sdHeader']/div[4]/div[2]/div/div[3]/div[3]/div/span[1]")).click(); 
     Snap.findElement(By.xpath("//a [@href='https://www.snapdeal.com/login']")).click(); 
     Snap.switchTo().frame("loginIframe"); 
     Snap.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 
     Snap.findElement(By.id("userName")).sendKeys(UserID); // PROBLEM 
     Snap.findElement(By.id("checkUser")).click(); 
     Snap.quit(); 
    } 

    @DataProvider(name = "ABN") 
    public Object [] Snap_Data() 
    { 
     Object [] login = new Object[3]; 
     login[0] = 777777; 
     login[1] = 888888; 
     login[2] = 984149104; 
     return login; 
    } 
} 
+0

Bitte geben Sie das Fehlerprotokoll an. –

+0

@badri, Wenn eine Antwort für Sie hilfreich ist, dann markieren Sie bitte als "akzeptiert", indem Sie auf das rechte Häkchen der Antwort klicken – NarendraR

Antwort

1

Leere Tastaturbefehle (char-Sequenz) akzeptiert nur char Sequenz/String als Parameter.

Also müssen Sie wie diese UserID+"" wirte. [Um es in String zu konvertieren]

Sie müssen auch Datenprovider ändern, wenn Sie 1d Array zurück, dann wird es TestNG Exception werfen, wie: -

Data Provider public java.lang.Object[] co.ans.Answer.Snap_Data() must return either Object[][] or Iterator<Object>[], not class [Ljava.lang.Object; 

diesen Code versuchen: es funktioniert an meinem Ende fein .

@Test(dataProvider = "ABN") 

public void Snap_Login(int UserID) throws InterruptedException{ 
System.setProperty("webdriver.chrome.driver","D:\\chromedriver.exe"); 
WebDriver Snap = new ChromeDriver(); 
Snap.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
Snap.get("https://www.snapdeal.com/"); 
Thread.sleep(3000); 
Snap.manage().window().maximize(); 
Thread.sleep(2000); 
Snap.findElement(By.xpath(".//*[@id='sdHeader']/div[4]/div[2]/div/div[3]/div[3]/div/span[1]")).click(); 
Snap.findElement(By.xpath("//a [@href='https://www.snapdeal.com/login']")).click(); 
Snap.switchTo().frame("loginIframe"); 
Snap.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 
Thread.sleep(1000); 
Snap.findElement(By.id("userName")).sendKeys(UserID+""); // PROBLEM 
Snap.findElement(By.id("checkUser")).click(); 
Snap.quit(); 
} 

@DataProvider(name = "ABN") 
public Object [][] Snap_Data(){ 
return new Object[][] {{777777},{888888},{984149104}}; 
} 

Ausgang: -

enter image description here

0

Die Erklärung der sendKeys() Methode sagt

Leere org.openqa.selenium.WebElement.sendKeys (CharSequence ... arg0)

Das heißt, es akzeptiert th e Wert als Zeichenfolge oder Zeichenfolge Und Sie übergeben int Wert, warum es Ihnen Fehler anzeigt.

Tun Sie einfach eine Sache, konvertieren Sie diesen Integer-Wert in String und versuchen Sie es. So können Sie mit der Methode Integer.toString() konvertieren. Aktualisieren Sie diese Zeile Code:

Snap.findElement(By.id("userName")).sendKeys(Integer.toString(UserID)); 
0

Hier ist die Antwort auf Ihre Frage:

Wie pro Ihre @DataProvider Sie die Werte eingefügt haben als 777777, 888888, 984149104 in eine Array von Objects.Also, wenn Sie die Methode Objects in der anrufenden Zugriff werden Snap_Login als int UserID, @Tuks Lösung wäre für Sie arbeiten, wo die int in sendKeys(Integer.toString(UserID)); in String wie umgewandelt wurden

Aber in Echtzeit Szenario die usecases wird anders. Echte Mobilnummern bestehen aus 10 Ziffern, z. 7777777777, 8888888888 oder E-Mail-IDs wie [email protected]. Gekennzeichnet, dass Fall müssen Sie nur einen einzigen Ansatz wie folgt:

Die Möglichkeit, die Integer Werte in String Werte ändern würde und sie als String innerhalb Snap_Login Methode übergeben, wo man nicht konvertieren müssen. Nachfolgend finden Sie den Beispielcode:

package demo; 

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

public class Q45451152_DataProvider_string 
{ 

    @Test(dataProvider = "ABN") 

    public void Snap_Login(String UserID) throws InterruptedException 
    { 
    System.setProperty("webdriver.chrome.driver","C:\\Utility\\BrowserDrivers\\chromedriver.exe"); 
    WebDriver Snap = new ChromeDriver(); 
    Snap.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    Snap.get("https://www.snapdeal.com/"); 
    Thread.sleep(3000); 
    Snap.manage().window().maximize(); 
    Thread.sleep(2000); 
    Snap.findElement(By.xpath(".//*[@id='sdHeader']/div[4]/div[2]/div/div[3]/div[3]/div/span[1]")).click(); 
    Snap.findElement(By.xpath("//a [@href='https://www.snapdeal.com/login']")).click(); 
    Snap.switchTo().frame("loginIframe"); 
    Snap.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); 
    Snap.findElement(By.id("userName")).sendKeys(UserID); // PROBLEM 
    Snap.findElement(By.id("checkUser")).click(); 
    Snap.quit(); 
    } 

    @DataProvider(name = "ABN") 
    public Object [] Snap_Data() 
    { 
    Object [] login = new Object[3]; 
    login[0] = "7777777777"; 
    login[1] = "8888888888"; 
    login[2] = "[email protected]"; 
    return login; 
    } 
} 

Es lohnt sich einhüllen von 10-stellige Echtzeit Handynummern zu erwähnen: One of the shortfalls of Java is indexes for lists and arrays are int, not long so cannot be extended. Also in Ihrem Fall ist es optimiert werden würde nur String vom @DataProvider

akzeptieren Lassen Sie mich wissen, ob dies Ihre Frage beantwortet.