2016-11-18 14 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; 
    } 

이 방법은 함께 Chromedriver.exe과 함께 "유틸리티"폴더에 저장되며, 경우에 로컬로 실행할 수 있습니다 Visual Studio를 통한 디버깅. 프로덕션 서버에 배포 할 때 chromedriver에 대한 경로를 찾을 수 없습니다. 참조 된 경로는 프로덕션 서버의 C : \ windows \ system32 \ inetsrv \ Utility \ chromedriver.exe로 변경됩니다.

파일을 참조 할 때 더 나은 방법은 무엇이며 경로가 올바른지 확인하십시오.

+0

간단한 해결 방법은 솔루션의 .Config 파일에 경로를 저장 한 다음 사용하는 것입니다. –

+0

이 방법의 문제점은 경로가 변경 될 수 있다는 것입니다. 우리는 IIS에 여러 사이트를 운영하는 서버가 여러 개 있으며 C :/드라이브 모두에서 실행되는 것은 아니므로 경로가 변경됩니다. 우리가 이전 버전을 저장 했으므로 폴더 이름이 변경됩니다. 배포 할 때 새 폴더 이름에는 연결된 배포의 현재 타임 스탬프가 있으므로 폴더 이름도 변경됩니다. – Jannik

+0

그런 다음 설치 프로그램이 레지스트리 키에 경로를 저장하도록 할 수 있습니다 (MSI 또는 유사한 것으로 가정). –

답변

0

다음을 시도해보십시오. drivers 폴더를 만들고 chromedriver를 추가하십시오.

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