WPF로 Selenium 을 "버튼"으로 컨트롤하는법

조회수 1603회

보통 콘솔창으로 사용할때는 문제가안되었는데 WPF로 구현하려니 '메인윈도우' 실행이 끝나면 IWebdriver 를 놓아버리더라구요 그래서 '버튼'들이 객체참조가 끊어져버립니다

아래의 소스가 문제되는 소스입니다 (버튼1,버튼2 핸들러가 driver를 찾지못함)

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // 시크릿모드옵션
            ChromeOptions opt = new ChromeOptions();
            opt.AddArgument("--incognito");

            // 커맨드창숨김
            ChromeDriverService ser = ChromeDriverService.CreateDefaultService();
            ser.HideCommandPromptWindow = true;

            // 셀레니움실행
            IWebDriver driver = new ChromeDriver(ser, opt);

        }


        private void b1_Click(object sender, RoutedEventArgs e)
        {            
            driver.Url = "http://naver.com";

        }

        private void b2_Click(object sender, RoutedEventArgs e)
        {
            // TV버튼클릭
            driver.FindElement(By.XPath("//*[@id='svc.tvcast']/span")).Click();
        }
    }

그래서

아래처럼 IWebdriver를 '메인윈도우' 바깥으로 끄집어내면 일단은 되긴됩니다

그런데 각종옵션들을 참조할수없게됩니다 (시크릿모드, 커맨드창숨김)

전부 다같이 빼버리면 옵션들은 밖으로 나오면 구문에러가 나구요ㅠㅠ

이문제를 해결을 어떻게 하면좋을까요?

public partial class MainWindow : Window
    {
        // 셀레니움실행 --------------얘를 밖으로 뺌@@@@@@@@
        IWebDriver driver = new ChromeDriver(ser, opt);

        public MainWindow()
        {
            InitializeComponent();

            // 시크릿모드옵션
            ChromeOptions opt = new ChromeOptions();
            opt.AddArgument("--incognito");

            // 커맨드창숨김
            ChromeDriverService ser = ChromeDriverService.CreateDefaultService();
            ser.HideCommandPromptWindow = true;
        }


        private void b1_Click(object sender, RoutedEventArgs e)
        {
            driver.Url = "http://naver.com";
        }

        private void b2_Click(object sender, RoutedEventArgs e)
        {
            // TV버튼클릭
            driver.FindElement(By.XPath("//*[@id='svc.tvcast']/span")).Click();
        }
    }
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 이미 처리 하셨는지 모르겠지만... 아래처럼 해보시면 어떨까요~?

    public partial class MainWindow : Window
    {
        // 셀레니움실행 --------------얘를 밖으로 뺌@@@@@@@@
        IWebDriver driver;
    
        public MainWindow()
        {
            InitializeComponent();
    
            // 시크릿모드옵션
            ChromeOptions opt = new ChromeOptions();
            opt.AddArgument("--incognito");
    
            // 커맨드창숨김
            ChromeDriverService ser = ChromeDriverService.CreateDefaultService();
            ser.HideCommandPromptWindow = true;
    
            driver = new ChromeDriver(ser, opt);
        }
    
    
        private void b1_Click(object sender, RoutedEventArgs e)
        {
            driver.Url = "http://naver.com";
        }
    
        private void b2_Click(object sender, RoutedEventArgs e)
        {
            // TV버튼클릭
            driver.FindElement(By.XPath("//*[@id='svc.tvcast']/span")).Click();
        }
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)