使用Selenium ChromeDriver打开Chrome浏览器时遇到麻烦

时间:2019-10-11 20:42:46

标签: c# selenium-webdriver selenium-chromedriver

我使用Selenium ChromeDriver 打开chrome浏览器,并以编程方式将网站加载到其中。

我从此NuGet安装了硒和 ChromeDrive

  

Install-Package Selenium.WebDriver-版本3.141.0 Install-Package   Selenium.WebDriver.ChromeDriver-版本77.0.3865.4000

我有一些问题:

  1. 如果目标计算机未安装Chrome浏览器,那么我如何通过ChromeDriver捕获它?有可能吗?

  2. 当我通过ChromeDriver实例打开chrome浏览器时,浏览器正在打开带有网站的chrome浏览器,但是另一个CUI窗口正在打开,我不想看到它,或者我想隐藏此CUI窗口。如果不可能,那么我如何以最小化状态打开此CUI窗口?

    当我使用FirefoxDriver时,在

    下面附有示例 CUI窗口截图。当我使用ChromeDriver实例时也会发生同样的情况。

    enter image description here

  3. 当我执行此代码chromeDriver.Close();时,打开的Chrome浏览器已关闭,但CUI窗口仍处于打开状态。因此,如果我在打开按钮上单击5次,则5 CUI窗口将随同5 chrome浏览器实例一起打开,而我必须手动关闭....我不想手动将其关闭,而是想在浏览器将其关闭时关闭被封闭...。如何实现?

  4. 如何从打开的chrome浏览器的代码中捕获chromeDriver.Close();,或者如果用户单击chrome浏览器的交叉按钮以将其关闭?

  5. 如何在已打开的chrome浏览器中打开新标签页,而不是打开新的chrome浏览器实例。如果根本没有打开任何Chrome浏览器,那么新的Chrome浏览器将打开...如何通过代码实现。下面的代码总是打开新的chrome浏览器。

    chromeDriver = new FirefoxDriver(options);
    chromeDriver.Navigate().GoToUrl("https://www.google.com");
    
  6. 当我使用chrome驱动程序时会发生另一个问题。它会打开chrome浏览器,但会在浏览器上显示一条通知,例如 Chrome正在由自动测试软件控制

    我搜索了google以将其隐藏,发现有人说要使用此选项

    options.setExperimentalOption("excludeSwitches", new String[] { "enable-automation" });
    

    最后,该功能不可用 setExperimentalOption ,该怎么办?

请明智地提供示例代码。

2 个答案:

答案 0 :(得分:1)

对于问题2,3,您可以使用以下代码 (使用 DriverService.Dispose(); 手动处理驱动程序服务):

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace MyProject
{
    public class Browser : IDisposable
    {
        bool disposed = false;    
        IWebDriver Driver;

        public Browser()
        {
            //Chrome Driver copied on startup path                
            ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(Application.StartupPath, "chromedriver.exe");

            //hide driver service command prompt window
            driverService.HideCommandPromptWindow = true;
            ChromeOptions options = new ChromeOptions();

            //hide browser if you need              
            //options.AddArgument("headless");
            //or this to hiding browser
            //options.AddArgument("--window-position=-32000,-32000");

            //On offer Dona bhatt for disable automated test notification
            options.AddExcludedArgument("enable-automation");
            //options.AddArgument("disable-infobars");

            Driver = new ChromeDriver(driverService, options);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposed)
                return;

            if (disposing)
            {
                Driver.Close();
                Driver.Quit();
                Driver.Dispose();

                DriverService.Dispose();
            }

            disposed = true;
        } 

        //this method for navigation
        public string Navigate(string url)
        {
            string page = string.Empty;
            try
            {
                Driver.Navigate().GoToUrl(url);
                page =Driver.PageSource;
            }
            catch
            {

            }
            return page;
        }

        //this method for wait to an element be visible by element ID
        private void WaitUntilLoad(string id, int timeOut)
        {
            WebDriverWait waitForElement = new WebDriverWait(Driver, TimeSpan.FromSeconds(timeOut));
            try
            {
                waitForElement.Until(ExpectedConditions.ElementIsVisible(By.Id(id)));
            }
            catch (WebDriverTimeoutException e)
            {

            }
        }
     } 
 }

使用此类:

using(Browser brw=new Browser())
{
    string pageSource=brw.Navigate("My URL");
}

答案 1 :(得分:0)

我无法将其发布为评论,因为它太长了。我认为这个问题不在您的讨论范围内,但我只是在评论您的项目时留下了评论...

这似乎很广泛。您是否有任何特定问题?所有这些似乎都是您可以研究和发现的事物。

1)必须下载chrome驱动程序,并随您的应用程序一起提供。

2)可能可以隐藏该窗口,但不确定为什么这将是一个困难的要求。我要说的是,默认情况下您不能阻止窗口显示。

3)您将必须通过.net代码关闭chrome窗口。硒不会足够优雅地终止所有镀铬窗口。

4)我不确定您要什么。有什么问题?

5)我认为在浏览器之间制表符可能有很大的不同,硒可能不是本机支持的。可能会有一些chrome驱动程序命令可以帮助您,但我不知道它们是什么。

6)同样,这通常不是首选的体验,我猜您的一个软件包与您正在使用的软件包具有不同的功能集。