请参阅以下数据驱动程序框架代码,我将面对以下错误消息
类型webelement中的方法sendkeys(charsequence)不是 适用于参数(int)。
用关键字作为问题对它们进行了评论。
浏览了包含stackoverflow的网页,下面分享了解决方案。
这是代码:
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 :(得分: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}};
}
输出: -
答案 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
,您已将值777777
,888888
,984149104
插入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}}
如果这回答你的问题,请告诉我。