【问题标题】:Data Driven Framework - SendKeys error message - eClipse数据驱动框架 - SendKeys 错误消息 - eClipse
【发布时间】:2018-01-09 02:34:43
【问题描述】:

请参考下面的数据驱动框架代码,我在下面的错误消息中遇到

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

已用关键字将它们评论为问题。

浏览过包括stackoverflow在内的网络,以下解决方案是共享的。

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

这是代码:

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

【问题讨论】:

  • 请提供错误日志。
  • @badri,如果任何答案对您有帮助,请点击答案右勾标记为accepted

标签: java eclipse selenium


【解决方案1】:

void sendKeys(char sequence) 只接受字符序列/字符串作为参数。

所以你需要像这样写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}};   
}

输出:-

【讨论】:

    【解决方案2】:

    sendKeys() 方法的声明说

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

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

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

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

    【讨论】:

      【解决方案3】:

      这是您问题的答案:

      根据您的 @DataProvider,您已将值作为 777777888888984149104 插入到 ArrayObjects 中。因此,当您在调用方法 Snap_Login 中以 int UserID 访问 Objects 时,@Tuks 解决方案将适用于已转换 int 的您像sendKeys(Integer.toString(UserID));一样进入String

      但在实时场景中,用例会有所不同。 真实手机号码为 10 位数字,例如77777777778888888888 或电子邮件 ID 为 badri@gmail.com。在这种情况下,您将只有一种方法,如下所示:

      选项是将Integer 值更改为String 值并将它们作为StringSnap_Login 方法中传递,您不需要在其中进行转换。请在下面找到示例代码:

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

      10 位实时手机号码值得一提:One of the shortfalls of Java is indexes for lists and arrays are int, not long so cannot be extended。所以在你的情况下,它会被优化为只接受来自@DataProviderString

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

      【讨论】:

        猜你喜欢
        • 2015-09-20
        • 1970-01-01
        • 2016-06-14
        • 2010-11-18
        • 2022-01-11
        • 2014-02-17
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多