2016-11-18 2 views
0

Мы пытаемся создать верификатор веб-сайта для нашего внутреннего сайта, чтобы убедиться, что все сайты заняты. Для этого мы используем хромированный селен.Не удалось найти файл с именем после развертывания. C#

У нас есть 2 проекта для этого: 1 главный проект, выполняющий код. 1 «общий» проект, который разделяется между всеми нашими различными решениями. Этот проект содержит данные, которые используются в нескольких решениях.

Мы разместили chromedriver в общем проекте, и инициализировать его следующим образом:

 public static IWebDriver InitiateChromeDriver() 
    { 
     ChromeOptions option = new ChromeOptions(); 

     option.AddUserProfilePreference("download.default_directory", downloadPath); 
     option.AddUserProfilePreference("disable-popup-blocking", "true"); 

     var path = Path.GetFullPath("Utility"); 

     Console.WriteLine(path); 

     IWebDriver driver = new ChromeDriver(path, option, TimeSpan.FromMinutes(20)); 

     return driver; 
    } 

Этот метод помещается в папку «Utility», вместе с Chromedriver.exe, и может работать локально, когда отладки через Visual Studio. Когда мы развертываем его на нашем производственном сервере, он не может найти путь к хромированному реестру. Указанный путь изменяется на C: \ windows \ system32 \ inetsrv \ Utility \ chromedriver.exe на нашем производственном сервере.

Что такое лучший подход при ссылке на файл и обеспечение правильности пути?

+0

Простым решением было бы сохранить путь в файле .Config для решения, а затем использовать его. –

+0

Проблема с этим подходом заключается в том, что путь может измениться. У нас несколько серверов, работающих на разных сайтах в IIS, и не все они работают на диске C: /, поэтому путь изменится. Другая вещь, которая меняется, - это имя папки, так как у нас есть предыдущие версии. При развертывании новое имя папки имеет текущую временную метку прикрепленного к ней развертывания, поэтому имя папки также изменяется. – Jannik

+0

Затем вы можете попытаться сделать установщик сохранить путь в раздел реестра (при условии, что это MSI или что-то подобное). –

ответ

0

Попробуйте нижеследующее. Создайте папку с драйверами и добавьте к ней хромированный рекордер.

   ChromeOptions options = new ChromeOptions(); 
       option.AddUserProfilePreference("disable-popup-blocking", "true"); 
       driver = new ChromeDriver(Path.Combine(GetBasePath, @"Drivers\\"), options); 


    public static string GetBasePath 
    { 
     get 
     { 
      var basePath = 
       System.IO.Path.GetDirectoryName((System.Reflection.Assembly.GetExecutingAssembly().Location)); 
      basePath = basePath.Substring(0, basePath.Length - 10); 
      return basePath; 
     } 
    }