如何使用Selenium Webdriver Java切换到此弹出屏幕?

时间:2018-08-30 07:31:16

标签: maven selenium selenium-webdriver

场景是,当我单击它时有一个按钮,此弹出窗口作为附件图像打开。我应该在其中填充数据,然后单击提交按钮。 我无法使用以下代码切换到此弹出窗口:

    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

任何帮助将不胜感激。

enter image description here

3 个答案:

答案 0 :(得分:0)

根据我的经验,到达“新” Windowhandle需要花费几毫秒。在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和配置文件文件夹的路径即可。

答案 1 :(得分:0)

您可以在启动浏览器后尝试使用以下代码:

由于没有窗口/警报,因此无需切换。

打开的弹出窗口只是 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");

答案 2 :(得分:0)

用于登录并到达模式窗口中的firstName字段的完整代码。我相信其余的一切由您自己管理。

<select name="" id="">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<div id="div">hi</div>