2017-08-02 65 views
2

請參閱下面的數據驅動器的框架代碼,其中我在類型webelement面臨以下錯誤消息
數據驅動框架 - 的SendKeys錯誤消息 - ECLIPSE

的方法的SendKeys(CharSequence的)不 適用於參數(int)。

已經用關鍵字作爲問題評論它們。

瀏覽網頁包括計算器和下面的解決方案共享。

  1. 將編譯器版本從舊版本更改爲1.5或更高版本。 - 編譯器版本大於1.5。
  2. 將JRE版本從JRE8更改爲JRE7。 - 已嘗試使用JRE8 & JRE7但仍存在錯誤。參見下圖:

enter image description here

這是代碼:

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

請提供錯誤日誌。 –

+0

@badri,如果有任何答案對您有幫助,請點擊答案右側的勾號標記爲「已接受」 – NarendraR

回答

1

空隙的SendKeys(字符序列)只接受字符序列/字符串作爲參數。

所以,你需要像這樣的UserID+""。 [爲了將其轉換成字符串]

您還需要更改數據提供者,如果回到一維數組,那麼它會拋出TestNG的例外是: -

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

試試這個代碼:它工作正常,在我結束。

@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}}; 
} 

輸出: -

enter image description here

0

sendKeys()方法的聲明說

無效org.openqa.selenium.WebElement.sendKeys(CharSequence的......爲arg0)

這意味着它接受th e值作爲字符序列或字符串而你正在傳遞的值爲什麼會向你顯示錯誤。

只要做一件事將該整數值轉換爲字符串並嘗試。這是如何使用Integer.toString()方法進行轉換。更新此行的代碼:

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

這裏是回答你的問題:按照您的@DataProvider已插入值

由於777777888888984149104ObjectsArray。所以,當你在調用方法訪問ObjectsSnap_Loginint UserID,@Tuks解決方案會爲你工作,其中int已經sendKeys(Integer.toString(UserID));

但在實時場景中usecases被轉化爲String,這將是不同。 真實手機號碼爲10位數字77777777778888888888或電子郵件ID爲[email protected]。 Inthat情況如下,你將有隻有一個辦法:

的辦法是改變Integer值到String值和Snap_Login方法,在那裏你將不再需要轉換中他們通過爲String。請找到下面的代碼示例:

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; 
    } 
} 

其值得一提的櫃面的10位實時手機號碼One of the shortfalls of Java is indexes for lists and arrays are int, not long so cannot be extended。因此,在你的情況下,它會進行優化,只String@DataProvider

接受讓我知道如果這個回答你的問題。