Как выбрать модальную форму и ввести данные в поля ввода, используя Java - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь проверить функциональность входа в систему для сайта https://www.expedia.com/, используя Selenium WebDriver с Java.Я также использую шаблон дизайна Page Object Factory.

Процедура входа в систему: Перейти на сайт выше -> Щелкните меню «Учетная запись» -> выберите «Войти».Появится новое всплывающее окно входа в систему, где я пытаюсь ввести адрес электронной почты и пароль, используя мой скрипт автоматизации.

Вот мой код, который обрабатывает форму входа Expedia:

LoginPage.java содержит:

{

    @FindBy(id = "gss-signin-email")
    public WebElement txtUserName;

    @FindBy(id = "gss-signin-password")
    public WebElement txtPassword;

    @FindBy(id = "gss-keep-signin-check-label")
    public WebElement chkBoxKeepMeSignIn;

    @FindBy(id = "gss-signin-submit")
    public WebElement btnSignIn;

    public void setUserName(String uname) {

        txtUserName.click();
        txtUserName.sendKeys(uname);
    }

public void setPassword(String pwd) {

    txtPassword.click();
    txtPassword.sendKeys(pwd);
}

public void setKeepMeSignIn() {

    chkBoxKeepMeSignIn.click();
}

public void clickSignIn() {

    btnSignIn.click();
}

}

TC_LoginTest_001.java содержит:

{

    Page.menu.gotoAccounts();

    Page.menu.gotoSignIn();

    LoginPage lp = new LoginPage();

    driver.switchTo().activeElement();

    lp.setUserName(config.getProperty("username"));

    lp.setPassword(config.getProperty("password"));

    lp.setKeepMeSignIn();

    lp.clickSignIn();

}

Когда я запускаю свой скрипт с помощью Run As -> TestNg Suite, я получаю следующее сообщение об ошибке:

**LoginTest
java.lang.NullPointerException
at com.expedia.pages.LoginPage.setUserName(LoginPage.java:42)
at com.expedia.testcases.TC_LoginTest_001.LoginTest(TC_LoginTest_001.java:38)**

Тестовые данные не вводятся в поля ввода (например, адрес электронной почты и пароль).Похоже, мой сценарий не распознает модальную форму.Пожалуйста, предложите, как мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вот код Python, который я запустил без проблем.wait_for_element_present - это метод, который будет ожидать предварительной установки элемента и возвращать webelement.

url = "https://www.expedia.com/ "
driver.get(url)

driver.find_element_by_css_selector("#header-account-menu").click()
accountSignIn = wait_for_element_present('css',"#account-signin")
accountSignIn.click()
email = wait_for_element_present('css',"#gss-signin-email")
email.send_keys("hello")
driver.find_element_by_css_selector("#gss-signin-password").send_keys("hello")
driver.find_element_by_css_selector("#gss-signin-submit").click()

Java-код эквивалентен wait_for_element_present в моем коде выше.Пример исходного кода https://www.seleniumhq.org/docs/04_webdriver_advanced.jsp]

WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
0 голосов
/ 21 марта 2019

Вы переключаетесь в новое окно для доступа к элементу. Вот полный код Java. Надеюсь, это поможет.

public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + File.separator + "\\Executables\\Chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.expedia.com/");     
        String parentHandle = driver.getWindowHandle(); 
        WebElement element=driver.findElement(By.id("header-account-menu"));
        Actions action=new Actions(driver);
        action.moveToElement(element).click().build().perform();
        driver.findElement(By.id("account-signin")).click();
        for (String winHandle : driver.getWindowHandles()) {
            driver.switchTo().window(winHandle); 
            WebDriverWait wait = new WebDriverWait(driver, 30);
            WebElement elementemail = wait.until(ExpectedConditions.elementToBeClickable(By.id("gss-signin-email")));
            elementemail.sendKeys("xyz@gmail.com");
            WebElement elementpass = wait.until(ExpectedConditions.elementToBeClickable(By.id("gss-signin-password")));
            elementpass.sendKeys("xxxxxxx");

        }
        driver.switchTo().window(parentHandle); 

        }

Выход:

enter image description here

...