Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 如何处理pop窗口以访问pop元素_Selenium_Selenium Webdriver - Fatal编程技术网

Selenium 如何处理pop窗口以访问pop元素

Selenium 如何处理pop窗口以访问pop元素,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我有一个处理弹出窗口的测试用例,但是控件并没有进入弹出窗口。它显示的是主窗口的getTitle,而不是弹出窗口。你能看完下面的代码吗 @Test public void testText1() throws Exception { driver.get("http://www.hdfcbank.com"); Thread.sleep(8000); driver.findElement(By.xpath(".//*[@id='loginsubmit']")).click()

我有一个处理弹出窗口的测试用例,但是控件并没有进入弹出窗口。它显示的是主窗口的getTitle,而不是弹出窗口。你能看完下面的代码吗

@Test
public void testText1() throws Exception {
    driver.get("http://www.hdfcbank.com");
    Thread.sleep(8000);
    driver.findElement(By.xpath(".//*[@id='loginsubmit']")).click();

    String popupHandle = driver.getWindowHandle();
    WebDriver popup;

    popup = driver.switchTo().window(popupHandle);
    System.out.println(popup.getTitle());
    if (popup.getTitle().equals("netbanking")) {
        System.out.println("I am going to access the elements of popup");
        driver.findElement(By.xpath(".//*[@id='wrapper']/div[6]/a/img")).click();
    } else {
        System.out.println("Worth Trying try harder to get success");
        //   
    }

}
输出: {d0f39d30-49e7-4203-b9ef-10380fbfcb5e} HDFC银行:个人银行服务 我将访问弹出窗口的元素 线程“main”org.openqa.selenium.NoSuchElementException中出现异常:无法找到元素:{“方法”:“xpath”,“选择器”:“//*[@id='wrapper']]/div[6]/a/img”}
命令持续时间或超时:30.15秒

您走对了方向。
driver.getWindowHandle()
方法只返回当前窗口的句柄,该窗口将是您的主窗口。如果打开另一个弹出窗口,则需要调用
Set handles=driver.getWindowHandles()
以返回所有可用句柄的列表。然后可以调用
driver.switchTo().window(handles.get(handles.size()-1))
。这将切换到最后列出的(最新)窗口句柄

您也不需要声明新的WebDriver对象。通过调用
switchTo()
,可以将驾驶员的注意力转移到新窗口。在进行切换之前,请确保保存对主窗口手柄的引用,以便以后可以切换回主窗口

String mainHandle = driver.getWindowHandle();
String[] handles = driver.getWindowHandles().toArray(new String[0]);
driver.switchTo().window(handles[handles.length - 1]);
...
driver.close(); //close the popup window
driver.switchTo().window(mainHandle);

嗨@Satendra你说的弹出窗口是什么意思?是java脚本窗口还是html弹出窗口?如果它是html弹出窗口,那么您不必遵循您创建的方法。这是一个直接的过程。如果需要更多帮助,请告诉我。handles.get(handles.size()-1)正在显示编译器错误。这是必需的数字值找不到符号符号:方法get(int)位置:java.util.Set-->类型的变量句柄(Alt-Enter显示提示)很抱歉,我修改了示例代码以首先转换为数组,因此可以检索最后一项。