Java Selenium-sendKeys()抛出';要发送的密钥应为非空字符序列';

Java Selenium-sendKeys()抛出';要发送的密钥应为非空字符序列';,java,selenium,automated-tests,data-driven-tests,Java,Selenium,Automated Tests,Data Driven Tests,嘿,伙计们,我是硒的新手,面临一些问题。 有3个类,一个是从excel中读取数据的数据提供者,另一个是添加用户的类(从excel中读取后),最后一个类是调用Add类的主类 下面是添加类代码 package pomPagefactory; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.testng.annotations.Test; publ

嘿,伙计们,我是硒的新手,面临一些问题。 有3个类,一个是从excel中读取数据的数据提供者,另一个是添加用户的类(从excel中读取后),最后一个类是调用Add类的主类

下面是添加类代码

    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();

    }
}
  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);
    }
}
DataProvider类是正确的,没有问题

我在主页面(主类)中调用了添加类(添加类中的方法)

主类代码

    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();

    }
}
  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
类中的变量声明为静态变量,然后将它们发送回
Add
类中的
create
方法。这没有多大意义,问题的根源是从未初始化过的变量,因此它们是
null

此外,您还误解了使用
PageFactory
PageFactory.initElements
不初始化
String
类变量,它怎么知道要将什么值放在那里?它使用
@FindBy
注释初始化
WebElement
类变量


Add
类中删除静态变量,如果您仅在
create()
中需要它们,则将它们传递给此方法;如果您在类级别需要它们,则在构造函数中将它们传递给
private
变量。

当我们为该类创建对象时,静态变量用默认值初始化。字符串类的默认值为null。所以它是空的。@Murthi这是我写的变量,从未初始化过,所以它们是
null
用错误堆栈跟踪更新问题