创建新标签并管理它们 - Selenium [英] Creating New Tabs and Managing Them - Selenium

查看:32
本文介绍了创建新标签并管理它们 - Selenium的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

var chromeOptions = new ChromeOptions();chromeOptions.AddArguments(无头");_driver = new OpenQA.Selenium.Chrome.ChromeDriver(chromeOptions);_driver.Navigate().GoToUrl(url);

它将打开 chromedriver.exe 的一个实例并导航到目标 URL.我需要导航到具有相同 chromedriver.exe 实例的其他 URL,并且我需要为每个 URL 设置特定的标头和 cookie.

如何使用 Selenium 和 ChromeDriver 实现目标?

解决方案

就我个人而言,我会用多个浏览器实例来做这件事.它们不应该在它们之间泄漏状态,这使得启动、清理和管理变得更加容易.

但是 - 如果你必须使用标签,这样的东西会有所帮助......

这是一个简单的管理器:

 类 BrowserManager{私有 IWebDriver 驱动程序;公共浏览器管理器(){//在这里做你的浏览器选项驱动程序 = 新的 ChromeDriver();driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);}公共 IWebDriver getDriver(){回程司机;}public void addTab(string url){var js = $"window.open('{url}','_blank');";((IJavaScriptExecutor)driver).ExecuteScript(js);var handles = driver.WindowHandles.ToArray();driver.SwitchTo().Window(handles[handles.Length -1]);//切换到最新标签driver.Navigate().GoToUrl(url);}public void activateTabForPartialURL(string url){var handles = driver.WindowHandles;foreach(句柄中的var句柄){driver.SwitchTo().Window(handle);如果 (driver.Url.Contains(url))返回;}}}

这就是你如何使用它.有很多方法可以找到你想要的标签,这只是一个简单的例子

<预><代码>类 UsingTheBrowserManager{[测试]公共无效 usingIt(){字符串 google = "https://www.google.com";string stackoverflow = "https://stackoverflow.com";var browserManager = new BrowserManager();var driver = browserManager.getDriver();//创建所有驱动程序:browserManager.addTab(google);browserManager.addTab(stackoverflow);//做你的cookie/header工作//...//选择并制表并执行操作或获取一些数据browserManager.activateTabForPartialURL(google");Debug.WriteLine(browserManager.getDriver().Title);browserManager.activateTabForPartialURL(stackoverflow");Debug.WriteLine(browserManager.getDriver().Title);}}

Here is my Code:

var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments("headless");
_driver = new OpenQA.Selenium.Chrome.ChromeDriver(chromeOptions);
_driver.Navigate().GoToUrl(url);

It will open an instance of chromedriver.exe and will navigate to the target URL. I need to navigate to other URLs with the same chromedriver.exe intance, and I need to set specific headers and cookies for each URL.

How to achieve something with Selenium and ChromeDriver?

解决方案

Personally, i;d do this with multiple browser instances. They shouldn't leak state between them and it makes start up, cleandown and management much easier.

However - if you must use tabs, something like this would help...

This is a simple manager:

  class BrowserManager
    {
        private IWebDriver driver;
   
        public BrowserManager()
        {
            //do your browser options here
            driver = new ChromeDriver();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
        }

        public IWebDriver getDriver()
        {
            return driver;
        }

        public void addTab(string url)
        {
            var js = $"window.open('{url}','_blank');";
            ((IJavaScriptExecutor)driver).ExecuteScript(js);

            var handles = driver.WindowHandles.ToArray<string>();
            driver.SwitchTo().Window(handles[handles.Length -1]); //switch to latest tab
            driver.Navigate().GoToUrl(url);
        }

        public void activateTabForPartialURL(string url)
        {
            var handles = driver.WindowHandles;
            foreach (var handle in handles)
            {
                driver.SwitchTo().Window(handle);
                if (driver.Url.Contains(url))
                    return;
            }
        }

    }


This is how you use it. Plenty more ways to find the tabs you want, this is just a quick example


    class UsingTheBrowserManager
    {
        [Test]
        public void usingIt()
        {
            string google = "https://www.google.com";
            string stackoverflow = "https://stackoverflow.com";

            var browserManager = new BrowserManager();
            var driver = browserManager.getDriver();

            //create all your drivers:
            browserManager.addTab(google);
            browserManager.addTab(stackoverflow);

            //Do your  cookie/header work 
            //...

            //pick and tab and doing an action or get some data
           browserManager.activateTabForPartialURL("google");
            Debug.WriteLine(browserManager.getDriver().Title);

            browserManager.activateTabForPartialURL("stackoverflow");
            Debug.WriteLine(browserManager.getDriver().Title);

        }

    }

这篇关于创建新标签并管理它们 - Selenium的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆