Возникли проблемы при открытии браузера Chrome с Selenium ChromeDriver - PullRequest
1 голос
/ 11 октября 2019

Я использую Selenium ChromeDriver , чтобы открыть браузер Chrome и загрузить в него сайт программным способом.

Я устанавливаю selenium & ChromeDrive из этого NuGet

Install-Package Selenium.WebDriver -Version 3.141.0 Install-Package Selenium.WebDriver.ChromeDriver -Version 77.0.3865.4000

У меня есть несколько вопросов:

  1. если на целевом ПК не установлен браузер Chrome, как я могу захватить его с помощью ChromeDriver? это возможно?

  2. когда я открываю браузер Chrome экземпляром ChromeDriver, то браузер открывает браузер Chrome с сайтом, но открывается другое окно CUI, которое я не хочу видеть или яхочу скрыть это окно CUI. если это невозможно, то как я могу открыть это окно CUI в состоянии минимизации?

    образец снимка экрана окна CUI, прикрепленного ниже, когда я работаю с FirefoxDriver. то же самое происходит, когда я работаю с экземпляром ChromeDriver.

    enter image description here

  3. , когда я выполняю этот код chromeDriver.Close();, затем открывается браузер Chromeзакрывается, но окно CUI все еще открыто. так, если я нажимаю 5 раз на кнопку открытия, то открывается окно 5 CUI вместе с 5 экземплярами браузера Chrome, которые мне пришлось закрыть вручную .... которые я не хочу закрывать вручную, а хочу закрыть, когда браузер будетбыть закрытым .... как этого добиться?

  4. как захватить из кода, который открыт браузер Chrome рядом с этим кодом chromeDriver.Close(); или если пользователь нажмет на крестик кнопки браузера хромзакрыть его?

  5. как открыть новую вкладку в уже открытом браузере Chrome вместо открытия нового экземпляра браузера Chrome . если браузер chrome вообще не открыт, то откроется новый браузер chrome ... как этого добиться с помощью кода. нижеприведенный код открывает новый браузер Chrome всегда .... что изменить там для моей точки 5

    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 ]

1 голос
/ 12 октября 2019

Для вопроса 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");
}
0 голосов
/ 12 октября 2019

Я не могу опубликовать это как комментарий, потому что это слишком долго. Я думаю, что этот вопрос не по теме, но я только что отметил мои комментарии к вашим позициям ...

Кажется, это слишком много. У вас есть проблемы с какой-либо конкретной проблемой? Все это похоже на то, что вы можете исследовать и выяснять.

1) Драйвер Chrome должен быть загружен и поставлен вместе с вашим приложением.

2) Возможно, можно скрыть это окно, но не уверен, почему это будет жестким требованием. Я просто скажу, что вы не можете по умолчанию предотвратить отображение окна.

3) Вам придется закрыть хромированные окна через ваш .net код. Селен не будет достаточно грациозным, чтобы закрыть все хромированные окна.

4) Я не уверен, что вы просите. В чем проблема?

5) Я думаю, что вкладки могут быть сделаны по-разному между браузерами, это может быть не то, что изначально поддерживается в селене. Там могут быть некоторые команды драйвера chrome, которые могут помочь, но я понятия не имею, что это такое.

6) Опять же, это, как правило, не предпочтительный опыт, я предполагаю, что один из ваших пакетов имеет набор функций, отличающийся от того, что вы читали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...