如何在不切换标签的情况下处理Selenium中的多个标签

时间:2018-01-06 14:10:39

标签: c# selenium selenium-webdriver selenium-chromedriver

我可以轻松做到

driver.SwitchTo().Window(newTabInstance);

但我希望能够同时处理多个标签而无需切换到不同的标签。基本上,能够同时将javascript插入多个选项卡而无需在该选项卡上。有办法吗?

例如:

tab1.executejavascript("something");
tab2.executejavascript("something");

4 个答案:

答案 0 :(得分:2)

直接回答 you won't be able to handle multiple tabs at the same time without switching to different tabs

原因

要执行任何操作 Selenium 需要关注。除非焦点在任何特定 TAB Selenium 上,否则将无法执行中的任何操作TAB / <强>窗口

答案 1 :(得分:0)

编辑:就像@DebanjanB所说,selenium需要专注,所以创建一个新的类来处理焦点并专注于你。最终结果正是您所需要的,在多个选项卡中运行脚本,每个选项卡都有一个命令。

public class Tab
{
    private readonly string WindowIdentity;
    private readonly IWebDriver driver; //If you have a driver static class that can be accessed from anywhere,
    // then call the driver directly in the functions below, otherwise, initialize this variable in the constructor.

    /// <summary>
    /// Default constructor for Tab class, initializes the identity string from driver.
    /// </summary>
    /// <param name="windowIdentity">The unique string from running driver.</param>
    public Tab(string windowIdentity)
    {
        WindowIdentity = windowIdentity;
    }

    /// <summary>
    /// Runs the given script to the tab.
    /// </summary>
    /// <param name="script">The script to run.</param>
    public void RunScript(string script)
    {
        //Temporary variable to switch back to.
        string initialWindow = driver.CurrentWindowHandle;

        driver.SwitchTo().Window(WindowIdentity);
        (IJavaScriptExecutor)driver.ExecuteScript(script);
        driver.SwitchTo().Window(initialWindow);
    }
}

每当有新窗口时,创建一个Tab对象以便更轻松地管理

//if the second entry of the array is your new tab
Tab tab1 = new Tab(driver.WindowHandles[1]) 

然后只需致电

tab1.RunScript("")'

答案 2 :(得分:0)

Windows / tabs有什么区别。只需使用多个窗口,因为chrome中的窗口可以连接到其他窗口并充当选项卡。我认为现在应该设计解决方法,因为据说硒需要“聚焦”到“聚焦”在一个选项卡上,这样您就不能同时处理不同的选项卡,但是可以打开并行窗口并在某种意义上同时运行它们这些浏览器上的窗口只是它们自己的选项卡,可以将它们组合成窗体窗口。

答案 3 :(得分:0)

如果由于中断其他软件窗口而导致更改焦点问题,则可以使用无头chrome。因此,所有操作均在后台执行,并且不会干扰其他窗口。但是,不可避免地需要几毫秒的时间来更改标签。