Selenium webdriver 当用户使用selenium webdriver单击弹出窗口上提供的按钮时打开新选项卡
有一个关于SeleniumWebDriver的问题,给出了一个场景 我登录到应用程序 点击一些链接 它会打开一个新的弹出窗口,其中包含iframe 此弹出窗口上有一个预览按钮,如果我手动单击,它将在上一个父窗口中打开一个新选项卡,但如果我使用selenium webdriver单击此按钮,它将打开一个新窗口 我想通过单击此预览按钮,使用selenium webdriver打开新选项卡有解决方案吗?Selenium webdriver 当用户使用selenium webdriver单击弹出窗口上提供的按钮时打开新选项卡,selenium-webdriver,Selenium Webdriver,有一个关于SeleniumWebDriver的问题,给出了一个场景 我登录到应用程序 点击一些链接 它会打开一个新的弹出窗口,其中包含iframe 此弹出窗口上有一个预览按钮,如果我手动单击,它将在上一个父窗口中打开一个新选项卡,但如果我使用selenium webdriver单击此按钮,它将打开一个新窗口 我想通过单击此预览按钮,使用selenium webdriver打开新选项卡有解决方案吗? 这些是你应该采取的步骤 登录应用程序 获取当前窗口句柄 查找除currentWindow句柄之外的
这些是你应该采取的步骤 登录应用程序 获取当前窗口句柄 查找除currentWindow句柄之外的窗口句柄列表 切换到新打开的窗把手,切换到iframe 单击iframe内的按钮 再次获取窗口句柄 切换到新打开的窗口 执行一些操作,关闭除父窗口外的所有窗口。 示例可以如下所示。注:C代码
我猜您没有使用chrome
通常,webdriver会强制浏览器打开一个新窗口,而不是选项卡,通过切换窗口更容易处理。和IE和Firefox一样,chrome会打开一个新的标签而不是一个新窗口,并且它仍然支持切换窗口。我就是这样发现的,试试看 Selenium Webdriver API可能不支持处理选项卡。您使用的是什么语言绑定?根据面临相同问题的语言,弹出处理程序的工作方式有所不同。有办法吗?没有,我使用的是Firefox,所以你可以让它作为一个新窗口打开,然后处理切换窗口。不,当我手动执行此操作时,当我单击弹出窗口上的可用按钮时,它会在弹出窗口后面的父窗口中打开一个新选项卡。主要问题是,我只能使用框架标记切换到此弹出窗口,无法获得此操作的句柄弹出窗口我真的不知道为什么你可以发布一些代码并解释步骤发生了什么?我有点糊涂了;字符串pwin=driver.getWindowHandle;//登录代码//单击后将打开一个弹出窗口,其中包含iframe not窗口,我无法找到其句柄驱动程序。findElementBy.idid.click;driver.switchTo.framedriver.findElementBy.idid;//接下来的单击将打开新窗口,它应该与弹出窗口后面的父选项卡一起打开//但它正在打开新窗口,我想切换到此窗口驱动程序。findElementBy.idid.click;你的代码不处理弹出窗口我说的是一个奇特的弹出窗口,就像大多数网络应用现在使用的一样,所以切换到弹出窗口是通过switchto.frame调用获得的,但是当我单击弹出窗口上可用的按钮时,它会打开新窗口我想打开此按钮上的新选项卡与家长一起单击window@Mubbashir... 单词popup对不了解您的应用程序的人没有帮助。你在说什么样的弹出窗口?我最初认为是一个弹出窗口,正如你在原始帖子中提到的。是的,我的错!让我重新表述我的场景1:主窗口有链接,我点击该链接2:它打开新的iframe弹出窗口,有预览按钮3:我点击预览按钮,它打开一个新窗口,而不是我想打开父窗口的新选项卡,并想切换该选项卡上的控制
public void PopupWindowHandle()
{
//logged into application
//get current window handle
string prentWindowHandle = Driver.CurrentWindowHandle;
//click should generate a new tab
Driver.FindElement(By.Id("id")).Click();
//get window handle counts. In your case should be 2
List<string> windowHandles = Driver.WindowHandles.ToList();
//switchTo newly opened window handle
foreach (string handle in windowHandles)
{
if (handle != prentWindowHandle)
{
Driver.SwitchTo().Window(handle);
//switch focus into iframe
Driver.SwitchTo().Frame(Driver.FindElement(By.CssSelector("Iframe Selector")));
//click should generate another window
Driver.FindElement(By.Id("id")).Click();
//should be 2 in total
List<string> newHandles = Driver.WindowHandles.ToList();
foreach (string newHandle in newHandles)
{
if (newHandle != handle)
{
Driver.SwitchTo().Window(newHandle);
//do some work
Driver.Close();
Driver.SwitchTo().Window(handle);
break;
}
}
Driver.Close();
Driver.SwitchTo().Window(prentWindowHandle);
break;
}
}
}