Selenium-sendKeys (), выбрасывающий «Ключи для отправки, должен быть ненулевым CharSequence» - PullRequest
0 голосов
/ 20 февраля 2019

Эй, ребята, я новичок в Selenium и столкнулся с некоторыми проблемами.Есть 3 класса, один - Data_Provider, который считывает данные из Excel, другой - класс для добавления пользователей (после чтения из Excel). Последний класс - это основной класс, который вызывает Add class.

Ниже приведен код класса 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();

    }
}

Класс DataProvider корректен, проблем в нем нет.

Я вызвал класс Add (методы в классе add) на главной странице (основной класс)

Код основного класса

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

1 Ответ

0 голосов
/ 20 февраля 2019

Вы объявили переменные в классе Add как статические, а затем отправили их обратно в метод create в классе Add.Это не имеет большого смысла, и источник проблемы, переменные, где никогда не инициализируются, поэтому они null.

Кроме того, вы неправильно поняли использование PageFactory, PageFactory.initElements неинициализировать String переменные класса, как он может знать, какое значение поместить туда?Он инициализирует WebElement переменные класса с аннотацией @FindBy.

Удалите статические переменные из класса Add, если они нужны только в create(), передайте их этому методу, если они нужны на уровне класса, передайте их в конструкторе private переменным.

...