Selenium-sendKeys() 抛出 'Keys to send should be a not null CharSequence'
Selenium-sendKeys() throwing 'Keys to send should be a not null CharSequence'
大家好,我是 Selenium 的新手,遇到了一些问题。
有 3 个 class,一个是 Data_Provider,它从 excel 读取数据,另一个是 class 添加用户(从 excel 读取后),最后一个 class 是调用 Add class.
的 main class
下面是添加class代码
package pomPagefactory;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
public class Add extends Data_Provider {
public Add(WebDriver driver) {
super(driver);
// TODO Auto-generated constructor stub
}
public static String fname, lname, title, email, tel, uname, pass, cpass;
@Test(dataProvider = "testset")
public void create(String fname, String lname, String title, String email, String tel, String uname, String pass,
String cpass) {
driver.findElement(By.xpath("//input[@name='FirstName']")).clear();
driver.findElement(By.xpath("//input[@name='FirstName']")).sendKeys(fname);
driver.findElement(By.xpath("//input[@id='LastName']")).clear();
driver.findElement(By.xpath("//input[@id='LastName']")).sendKeys(lname);
driver.findElement(By.xpath("//input[@id='Title']")).clear();
driver.findElement(By.xpath("//input[@id='Title']")).sendKeys(title);
driver.findElement(By.xpath("//input[@id='Email']")).clear();
driver.findElement(By.xpath("//input[@id='Email']")).sendKeys(email);
driver.findElement(By.xpath("//input[@id='TelephoneNumber']")).clear();
driver.findElement(By.xpath("//input[@id='TelephoneNumber']")).sendKeys(tel);
driver.findElement(By.xpath("//input[@id='UserID']")).clear();
driver.findElement(By.xpath("//input[@id='UserID']")).sendKeys(uname);
driver.findElement(By.xpath("//input[@id='password']")).clear();
driver.findElement(By.xpath("//input[@id='password']")).sendKeys(pass);
driver.findElement(By.xpath("//input[@id='cpassword']")).clear();
driver.findElement(By.xpath("//input[@id='cpassword']")).sendKeys(cpass);
driver.findElement(
By.xpath("//button[@type='submit']//span[@class='ng-scope'][contains(text(),'Create User')]")).click();
}
}
DataProvider class 正确无误。
我在主页(main class)
中调用了Add class(add class中的方法)
主要class代码
package pomPagefactory;
//all imports;
public class Admin {
public static WebDriver driver;
@Test
public void Page() throws Exception {
System.setProperty("webdriver.chrome.driver",
"C:\Users\srawat\Downloads\chromedriver_win32\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
Locator loc = PageFactory.initElements(driver, Locator.class);
loc.Login("uaadmin", "novell");
loc.people_user();
loc.create_new_user();
Add ad=PageFactory.initElements(driver, Add.class);
ad.create(Add.fname,Add.lname, Add.title, Add.email, Add.tel, Add.uname,
Add.pass, Add.cpass);
}
}
您将 Add
class 中的变量声明为静态变量,然后将它们发送回 Add
class 中的 create
方法。这没有多大意义,问题的根源是从未初始化的变量,因此它们是 null
.
另外你误解了PageFactory
的用法,PageFactory.initElements
没有初始化String
class变量,它怎么知道要放什么值呢?它使用 @FindBy
注释初始化 WebElement
class 变量。
删除Add
class中的静态变量,如果你只在create()
中需要它们,将它们传递给这个方法,如果你需要它们在class中传递它们在构造函数中为 private
变量。
大家好,我是 Selenium 的新手,遇到了一些问题。 有 3 个 class,一个是 Data_Provider,它从 excel 读取数据,另一个是 class 添加用户(从 excel 读取后),最后一个 class 是调用 Add class.
的 main class下面是添加class代码
package pomPagefactory;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
public class Add extends Data_Provider {
public Add(WebDriver driver) {
super(driver);
// TODO Auto-generated constructor stub
}
public static String fname, lname, title, email, tel, uname, pass, cpass;
@Test(dataProvider = "testset")
public void create(String fname, String lname, String title, String email, String tel, String uname, String pass,
String cpass) {
driver.findElement(By.xpath("//input[@name='FirstName']")).clear();
driver.findElement(By.xpath("//input[@name='FirstName']")).sendKeys(fname);
driver.findElement(By.xpath("//input[@id='LastName']")).clear();
driver.findElement(By.xpath("//input[@id='LastName']")).sendKeys(lname);
driver.findElement(By.xpath("//input[@id='Title']")).clear();
driver.findElement(By.xpath("//input[@id='Title']")).sendKeys(title);
driver.findElement(By.xpath("//input[@id='Email']")).clear();
driver.findElement(By.xpath("//input[@id='Email']")).sendKeys(email);
driver.findElement(By.xpath("//input[@id='TelephoneNumber']")).clear();
driver.findElement(By.xpath("//input[@id='TelephoneNumber']")).sendKeys(tel);
driver.findElement(By.xpath("//input[@id='UserID']")).clear();
driver.findElement(By.xpath("//input[@id='UserID']")).sendKeys(uname);
driver.findElement(By.xpath("//input[@id='password']")).clear();
driver.findElement(By.xpath("//input[@id='password']")).sendKeys(pass);
driver.findElement(By.xpath("//input[@id='cpassword']")).clear();
driver.findElement(By.xpath("//input[@id='cpassword']")).sendKeys(cpass);
driver.findElement(
By.xpath("//button[@type='submit']//span[@class='ng-scope'][contains(text(),'Create User')]")).click();
}
}
DataProvider class 正确无误。
我在主页(main class)
中调用了Add class(add class中的方法)主要class代码
package pomPagefactory;
//all imports;
public class Admin {
public static WebDriver driver;
@Test
public void Page() throws Exception {
System.setProperty("webdriver.chrome.driver",
"C:\Users\srawat\Downloads\chromedriver_win32\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
Locator loc = PageFactory.initElements(driver, Locator.class);
loc.Login("uaadmin", "novell");
loc.people_user();
loc.create_new_user();
Add ad=PageFactory.initElements(driver, Add.class);
ad.create(Add.fname,Add.lname, Add.title, Add.email, Add.tel, Add.uname,
Add.pass, Add.cpass);
}
}
您将 Add
class 中的变量声明为静态变量,然后将它们发送回 Add
class 中的 create
方法。这没有多大意义,问题的根源是从未初始化的变量,因此它们是 null
.
另外你误解了PageFactory
的用法,PageFactory.initElements
没有初始化String
class变量,它怎么知道要放什么值呢?它使用 @FindBy
注释初始化 WebElement
class 变量。
删除Add
class中的静态变量,如果你只在create()
中需要它们,将它们传递给这个方法,如果你需要它们在class中传递它们在构造函数中为 private
变量。