我不是在谈论像警报,确认或提示对话框的弹出窗口。 在应用程序中,如果我点击一个按钮,弹出被打开。 我不能给webdriver的切换到弹出窗口。
我试着使用getWindowHandles(),但它只返回主窗口句柄。
我也试过switchTo.window(“windowname”),但没有奏效。
我不是在谈论像警报,确认或提示对话框的弹出窗口。 在应用程序中,如果我点击一个按钮,弹出被打开。 我不能给webdriver的切换到弹出窗口。
我试着使用getWindowHandles(),但它只返回主窗口句柄。
我也试过switchTo.window(“windowname”),但没有奏效。
通常模块化的Windows是相同的DOM的一部分,不同的JavaScript警报。 只有它们区别于页面的其余部分的事情是,他们是在不同的帧 。
试着看看这个模块化窗口所在的框架或iframe标签内。 如果任何父是帧或iframe,那么你将不得不上下文更改为框架,然后才能上的Performa模式窗口任何行动。
因此,寻找帧做driver.switchTo().frame()
然后执行要的元素有关的动作。 一旦操作完成后,这将最有可能带你回到主页。 使用driver.switchTo().defaultContent()
把焦点回到主界面。
这太问题会有所帮助。
如果这也不行那将是有帮助的看网页或它的HTML。
您是否使用pageobjects?
如果使用的是这一点,你需要找到的元素弹出窗口后,因为initElements不会初始化他们,如果他们是不可见的,当你第一次打开网页。
//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);
}
}
假设你在谈论一个JavaScript警告。
final Alert a = driver.switchTo().alert();
a.accept();
要么
直接执行JavaScript处理altert
和
也许等待警报露面
按照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
事件之间的延迟是必要的,否则你会错过的事件。