16
Фев
2017

Как получить доступ к элементам всплывающей формы(у формы url отличный от url-а основной страницы) на Selenium WebDriver

На основной странице выбираю пункт "Логин". Всплывает "логин окно" окно с полями: логин, пароль. Причем у этого всплывающего окна url отличается от url-а основной страницы. Не получается достучаться до элементов: логин и пароль и заполнить их. Предполагаю, что нужно переключиться на него, но alert и frame не срабатывают.

Вот код (на архитектуру и паттерны не смотрите, рефакторинг позже будет)

package homepagetests;
import static homepagetests.TestConstants.HOME_PAGE_URL;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class LoginTest {
private WebDriver driver;
private WebElement element;

@Before
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    driver.get(HOME_PAGE_URL);
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

@Test
public void correctLoginIncorrectPassword() {
    element = driver.findElement(By.cssSelector(".ePanelLinks_link.mPopupArrow.jsQuickPanelUserMenu"));

    Actions actions = new Actions(driver);
    actions.moveToElement(element).build().perform();

    driver.findElement(
            By.cssSelector(".ePanelLinks_term.jsOption.jsClearTilesFromStorage.jsLoginPanel.jsBottomPart")).click();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    // вот здесь ошибка Unable to locate element: "method":"id","selector":"jsLogin"}
    driver.findElement(By.id("jsLogin")).clear();
    driver.findElement(By.id("jsLogin")).sendKeys("1");
    driver.findElement(By.id("jsPassword")).clear();
    driver.findElement(By.id("jsPassword")).sendKeys("2");
    driver.findElement(By.id("Authentication")).click();
}

@After
public void tearDown() throws Exception {
    driver.quit();
}

}

Получился только один способ: открыть данный url в новом окне и тогда доступ к элементам есть, всё работает.

driver.get("https://www.ozon.ru/context/loginframe/");

Но всё-таки должен быть способ получить доступ к всплывающему окну с основной страницы (так, как это реально для пользователя выглядит)?

Источник: https://ru.stackoverflow.com/questions/628437/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BA-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC-%D0%B2%D1%81%D0%BF%D0%BB%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9-%D1%84%D0%BE%D1%80%D0%BC%D1%8B%D1%83-%D1%84%D0%BE%D1%80%D0%BC%D1%8B-url-%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-%D0%BE%D1%82-url-%D0%B0

Share

Тебе может это понравится...