【问题标题】:Opening of new tab when user click on a button provided on popup using selenium webdriver当用户单击使用 selenium webdriver 在弹出窗口中提供的按钮时打开新选项卡
【发布时间】:2015-04-30 11:27:42
【问题描述】:

有一个关于 Selenium WebDriver 的问题,给出的是一个场景

  1. 我登录应用程序
  2. 点击某个链接
  3. 它会打开一个包含 iframe 的新弹出窗口
  4. 此弹出窗口上有一个预览按钮,如果我手动单击该按钮,它将在前一个父窗口中打开一个新选项卡,但如果我使用 selenium webdriver 单击此按钮,它将打开新窗口
  5. 我想通过单击此预览按钮来使用 selenium webdriver 打开新选项卡有什么解决方案吗?

【问题讨论】:

  • Selenium Webdriver API 可能不支持处理标签。
  • 您使用的是什么语言绑定?弹出处理程序的工作方式因语言而异
  • 面临同样的问题。有解决办法吗?

标签: selenium-webdriver


【解决方案1】:

这些是你应该采取的步骤。

  • 登录应用程序
  • 获取当前窗口句柄
  • 查找除当前窗口句柄外的窗口句柄列表
  • switchTo()新打开的窗口句柄,switchTo()iframe
  • 单击iframe 内的按钮
  • 再次获取窗口句柄
  • switchTo()新打开的窗口
  • 执行一些操作,关闭除父窗口之外的所有窗口。

示例可能如下所示。 注意:C# 代码

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;
        }
    }
}

【讨论】:

  • 你的代码不处理弹出窗口我说的是一个花哨的弹出窗口,就像大多数 webapps 现在使用的那样,所以切换到该弹出窗口是通过 switchto.frame 调用获得的,但是当我点击弹出窗口中可用的按钮打开新窗口我想在此按钮上打开新选项卡单击父窗口
  • @Mubbashir... popup 这个词对不了解您的应用程序的人没有帮助。你在说什么样的弹出窗口?正如您在原始帖子中提到的那样,我最初认为是一个弹出窗口。
  • 是的,我的错!让我重新表述一下我的场景 1:主窗口有链接,我单击该链接 2:它会打开带有预览按钮的新 iframe 弹出窗口 3:我单击预览按钮,它会打开一个新窗口,而不是我想打开新标签使用父窗口并希望在该选项卡上切换控制
【解决方案2】:

我猜你没有使用 chrome。:) 通常,webdriver 强制浏览器打开一个新窗口而不是一个选项卡,通过切换窗口更容易处理。像 IE 和 Firefox 一样,但是 chrome 会打开一个新标签而不是一个新窗口,它仍然支持切换窗口。我是这样找到的,试试看。

【讨论】:

  • 不,我用的是火狐
  • 所以你可以让它作为一个新窗口打开,然后处理切换窗口。
  • 不,当我单击弹出窗口上可用的按钮时手动执行它时,它会在弹出窗口后面的父窗口中打开一个新选项卡,主要问题是我只能使用框架标签切换到此弹出窗口并且无法获取此弹出窗口的句柄我真的不知道为什么
  • 你能发布一些代码并解释这些步骤会发生什么吗?我有点困惑。
  • driver.get("abcportal/"); String pwin= driver.getWindowHandle(); //登录代码 //点击后会打开一个弹出窗口,其中 iframe 不是窗口,我找不到它的句柄driver.findElement(By.id("id")).click(); driver.switchTo().frame(driver.findElement(By.id("id"))); //点击后会打开新窗口应该与弹出窗口后面的父选项卡一起打开//但它正在打开新窗口,我想切换到这个窗口 driver.findElement(By.id("id")).click();
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2012-07-06
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多