【问题标题】:Creating New Tabs and Managing Them - Selenium创建新标签并管理它们 - Selenium
【发布时间】:2020-07-07 11:19:30
【问题描述】:

这是我的代码:

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

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

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

【问题讨论】:

标签: c# winforms selenium selenium-chromedriver


【解决方案1】:

就个人而言,我会使用多个浏览器实例来执行此操作。它们之间不应该泄漏状态,这使得启动、清理和管理更加容易。

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

这是一个简单的管理器:

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

    }


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


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

        }

    }

【讨论】:

  • 谢谢你,看起来很棒。将很快对其进行测试。作为另一个子问题,您知道如何在导航到 URL 之前添加标题吗?你知道导航后如何获取响应头和其他一些数据吗?如果是,我为他们打开一个新问题:)
猜你喜欢
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多