如何从主窗口切换到弹出窗口?(How to switch from main window to p

2019-07-17 16:55发布

我不是在谈论像警报,确认或提示对话框的弹出窗口。 在应用程序中,如果我点击一个按钮,弹出被打开。 我不能给webdriver的切换到弹出窗口。

我试着使用getWindowHandles(),但它只返回主窗口句柄。

我也试过switchTo.window(“windowname”),但没有奏效。

Answer 1:

通常模块化的Windows是相同的DOM的一部分,不同的JavaScript警报。 只有它们区别于页面的其余部分的事情是,他们是在不同的

试着看看这个模块化窗口所在的框架或iframe标签内。 如果任何父是帧或iframe,那么你将不得不上下文更改为框架,然后才能上的Performa模式窗口任何行动。

因此,寻找帧做driver.switchTo().frame()然后执行要的元素有关的动作。 一旦操作完成后,这将最有可能带你回到主页。 使用driver.switchTo().defaultContent()把焦点回到主界面。

太问题会有所帮助。

如果这也不行那将是有帮助的看网页或它的HTML。



Answer 2:

您是否使用pageobjects?

如果使用的是这一点,你需要找到的元素弹出窗口后,因为initElements不会初始化他们,如果他们是不可见的,当你第一次打开网页。



Answer 3:

//handle of the master window before clicking the link
String master = driver.getWindowHandle();

driver.findElement(By.linkText("Click me")).click();

//logic for waiting for the popup, checking the size to become greater than 1 or breaking after sometime to avoid the infinite loop.
int timeCount = 1;

do
{
   driver.getWindowHandles();
   Thread.sleep(200);
   timeCount++;
   if ( timeCount > 50 ) 
   {
       break;
   }
}
while ( driver.getWindowHandles().size == 1 );

//Assigning the handles to a set
Set<String> handles = driver.getWindowHandles();
//Switching to the popup window.
for ( String handle : handles )
{
    if(!handle.equals(master))
    {
         driver.switchTo().window(handle);
    }
}


Answer 4:

假设你在谈论一个JavaScript警告。

final Alert a = driver.switchTo().alert(); 
a.accept(); 

要么

直接执行JavaScript处理altert

也许等待警报露面



Answer 5:

按照webdriver的这个问题是固定在2.16,但它仍然无法正常工作的window.ShowmodalDialog支持

您可以使用Java Robot类来处理这样的情况。

例如:

Wait(5000); // Wait for model pop, 
    int keyInput[] =
    {
      KeyEvent.VK_S, KeyEvent.VK_E, KeyEvent.VK_L, KeyEvent.VK_E,
      KeyEvent.VK_N, KeyEvent.VK_I, KeyEvent.VK_U, KeyEvent.VK_M,
    };   

    Robot robot = new Robot();

    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyPress(KeyEvent.VK_TAB);


    for (int i = 0; i < keyInput.length; i++)
    {    
      robot.keyPress(keyInput[i]);
      robot.delay(100);    
    }  

    robot.delay(1000); 
    robot.keyPress(KeyEvent.VK_TAB);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_TAB);
    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_TAB);

    robot.delay(1000);
    robot.keyPress(KeyEvent.VK_ENTER); // Save Btn 

事件之间的延迟是必要的,否则你会错过的事件。



文章来源: How to switch from main window to popup window?