困惑于selenium webdriver中的getWindowHandle()方法

时间:2015-03-06 19:18:16

标签: java selenium selenium-webdriver

我已经编写了两个java文件来了解getWindowHandle()方法是如何工作的但是我在两个java文件中看到两个不同的输出时感到困惑

文件1:WindowHandling.java

     WebDriver driver = new FirefoxDriver();
    driver.get("file:///C:/SeleniumCode/Chapter%203/HTML/Window.html");
    String window1 = driver.getWindowHandle();
    //System.out.println("First window handle is "+window1);

    WebElement link = driver.findElement(By.linkText("Google Search"));
    link.click();
    Set<String> windowIterator = driver.getWindowHandles();
    for(String s:windowIterator)
    {
        System.out.println(s);
    }

O / P:

  

{c1310e40-aaed-44cf-9581-61f3b84753fa}

     

{7a99b954-3198-467f-9b49-9bb02e85d5b1}

文件2:WindowHandler.java

WebDriver driver = new FirefoxDriver();
    driver.get("file:///C:/SeleniumCode/Chapter%203/HTML/Window.html");
    String window1 = driver.getWindowHandle();
    System.out.println("First Window Handle is: "+window1);
    WebDriver popup = null;
    WebElement link = driver.findElement(By.linkText("Google Search"));
    link.click();
    String window2 = driver.getWindowHandle();
    System.out.println("Second window handle is "+window2);
    driver.switchTo().window(window1);
    driver.switchTo().window(window2);

O / P:

  

第一个窗口句柄是:{478bdad7-e057-4d27-99ec-38db1f020f6d}

     

第二个窗口句柄是{478bdad7-e057-4d27-99ec-38db1f020f6d}

如何在第一个java代码中两个窗口句柄不同而在第二个java代码中它是相同的

2 个答案:

答案 0 :(得分:0)

link.click()不会更改Windows处理程序。在第一个示例中,您枚举了驱动程序具有(getWindowHandles方法)的处理程序。您可以使用switchTo方法在这些处理程序之间进行操作。在第二个示例中,您将收到在此驱动程序实例(getWindowHandle方法)中唯一标识它的处理程序。因此,您两次收到相同的处理程序。然后在switchTo调用之前打印处理程序。

答案 1 :(得分:0)

在您的第一个示例中,您使用:

Set<String> windowIterator = driver.getWindowHandles();  // plural!

然后在循环中打印出句柄。

在您的第二个示例中,您的(仅相关)命令的顺序为:

String window1 = driver.getWindowHandle();
System.out.println("First Window Handle is: "+window1);
// some irrelevant code here
String window2 = driver.getWindowHandle();
System.out.println("Second window handle is "+window2);
// more irrelevant code:
driver.switchTo().window(window1);
driver.switchTo().window(window2);

您的问题是代码正在执行您告诉它要做的事情,而不是您告诉它要做的思考