数据驱动框架 - SendKeys错误消息 - eClipse

时间:2017-08-02 03:51:12

标签: java eclipse selenium

请参阅以下数据驱动程序框架代码,我将面对以下错误消息

  

类型webelement中的方法sendkeys(charsequence)不是   适用于参数(int)。

用关键字作为问题对它们进行了评论。

浏览了包含stackoverflow的网页,下面分享了解决方案。

  1. 将编译器版本从旧版本更改为1.5或更高版本。 - 已经有大于1.5的编译器版本。
  2. 将JRE版本从JRE8更改为JRE7。 - 尝试使用JRE8和JRE7,但仍然存在错误。见下图:
  3. 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;
        }
    }
    

3 个答案:

答案 0 :(得分:1)

void sendKeys(char sequence)只接受char sequence / String作为参数。

所以你需要像这样UserID+""。 [将其转换为字符串]

您还需要更改数据提供程序,如果返回1d数组,则会抛出TestNG Exception: -

 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

答案 1 :(得分:0)

sendKeys()方法的声明说

  

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

这意味着它接受该值作为字符序列或字符串并且您正在传递int值,以显示错误。

只需做一件事就可以将整数值转换为String并尝试。这是使用Integer.toString()方法进行转换的方法。更新此行代码:

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

答案 2 :(得分:0)

以下是您的问题的答案:

根据您的 @DataProvider ,您已将值777777888888984149104插入Array { {1}}。因此,当您在调用方法 Objects 中访问 Objects 作为Snap_Login时,@ Tok解决方案适合您int UserID已转换为int,如String

但在实时情景中,用例会有所不同。 真实手机号码为10位数,例如sendKeys(Integer.toString(UserID));7777777777或电子邮件ID为8888888888。在这种情况下,您将只有以下一种方法:

选项是将badri@gmail.com值更改为Integer值,并在String方法中将其作为String传递,您不需要转换。请在下面找到示例代码:

Snap_Login
  

值得一提的是 10位实时移动电话号码 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] = "badri@gmail.com"; return login; } } 。因此,在您的情况下,它会被优化为仅接受来自One of the shortfalls of Java is indexes for lists and arrays are int, not long so cannot be extended的{​​{1}}

如果这回答你的问题,请告诉我。