Как я могу переключиться на это всплывающее окно, используя Selen WebDriver Java? - PullRequest
0 голосов
/ 30 августа 2018

Сценарий таков, есть кнопка, когда я нажимаю на нее, это всплывающее окно открывается как прикрепленное изображение. И я должен заполнить данные в нем и нажать кнопку «Отправить». Я не могу переключиться на это всплывающее окно, используя следующий код:

    Set<String> handles = driver.getWindowHandles(); // get all window handles
    Iterator<String> iterator = handles.iterator();
    while (iterator.hasNext()){
        subWindowHandler = iterator.next();
    }
    driver.switchTo().window(subWindowHandler); // switch to popup window

Любая помощь будет оценена.

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы можете попробовать этот код после запуска браузера:

Нет необходимости переключаться, так как нет окна / оповещения.

Открытое всплывающее окно - это просто Div .

        driver.manage().window().maximize();
        driver.get("http://41.33.122.55:3333/users/login");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("username"))).sendKeys("alaatest");
        wait.until(ExpectedConditions.elementToBeClickable(By.id("password"))).sendKeys("QWERTY123");  
        WebElement loginButton =   wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.btn.btn-white-rounded.login-btn")));  

        JavascriptExecutor executor = (JavascriptExecutor)driver;
        executor.executeScript("arguments[0].click();", loginButton);

        WebElement creaetAccount = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='Add new Account']")));
        executor.executeScript("arguments[0].click();", creaetAccount);

        wait.until(ExpectedConditions.elementToBeClickable(By.name("firstName"))).sendKeys("Ali");
0 голосов
/ 30 августа 2018

Полный код для входа в систему и достижения поля firstName в модальном окне. В остальном вы сами управляете, я верю.

package navi; // rename this

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
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.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


public class Egypt {

    public static WebDriver driver;

    public WebDriverWait wait1s = new WebDriverWait(driver,1);
    public WebDriverWait wait5s = new WebDriverWait(driver,5);
    public WebDriverWait wait10s = new WebDriverWait(driver,10);
    public WebDriverWait wait30s = new WebDriverWait(driver,30);
    public WebDriverWait wait1m = new WebDriverWait(driver,60);
    public WebDriverWait wait2m = new WebDriverWait(driver,120);

    @BeforeClass
    public static void setUpClass() {
        FirefoxOptions options = new FirefoxOptions();
        ProfilesIni allProfiles = new ProfilesIni();         
        FirefoxProfile selenium_profile = allProfiles.getProfile("selenium_profile");
        options.setProfile(selenium_profile);
        options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
        System.setProperty("webdriver.gecko.driver", Secrets_and_variables.get_driver_path());
        driver = new FirefoxDriver(options);
        driver.manage().window().maximize();
        }

    @Before
    public void setUp() {}

    @After
    public void tearDown() {}

    @AfterClass
    public static void tearDownClass() {driver.quit();}

    @Test
    public void egypt() throws InterruptedException {

        driver.get("http://41.33.122.55:3333/users/login");
        WebElement fld_username = wait30s.until(ExpectedConditions.elementToBeClickable(By.id("username")));
        fld_username.sendKeys("alaatest");
        WebElement fld_pwd = driver.findElement(By.id("password"));
        fld_pwd.sendKeys("QWERTY123");
        WebElement btn_login = driver.findElement(By.xpath("/html/body/app-root/div[3]/account-management/login/div[1]/div[2]/div[2]/form/div[3]/button"));
        btn_login.click();
        wait30s.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/app-root/div[3]/request-management/div[2]/accounts-list/div/table/tbody")));
        WebElement btn_add_acc = driver.findElement(By.xpath("/html/body/app-root/div[3]/request-management/div[1]/div/div[3]/a"));
        btn_add_acc.click();
        WebElement fld_firstName = wait5s.until(ExpectedConditions.elementToBeClickable(By.name("firstName")));
        fld_firstName.sendKeys("John");
        Thread.sleep(10000);

    }
}
0 голосов
/ 30 августа 2018

Из моего собственного опыта требуется несколько мс, чтобы добраться до "нового" дескриптора окна. В Firefox это работает для меня:

public void goto2 () throws InterruptedException {
    Thread.sleep(100);
    ArrayList<String> winHandles = new ArrayList<String> (driver.getWindowHandles());
    Thread.sleep(100);
    driver.switchTo().window(winHandles.get(1));
}

В Chrome вам даже не нужно переключаться, драйвер выполняет всю работу сам. По крайней мере, на новых вкладках и окнах, не уверен, что на фреймах тоже.

Если вы хотите попробовать Chrome, есть мои настройки:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\pburgr\\Desktop\\chromedriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=C:\\Users\\pburgr\\AppData\\Local\\Google\\Chrome\\User Data");
driver = new ChromeDriver(options);
driver.manage().window().maximize();

Включает в себя существующий профиль Chrome, так что вы можете использовать расширения, кеш, что угодно. Просто отредактируйте путь к exe и папке профиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...