我已经编写了两个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代码中它是相同的
答案 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);
您的问题是代码正在执行您告诉它要做的事情,而不是您告诉它要做的思考。