ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 브라우저 자동화(by 셀레니움) 4 - 셀레니움 테스트 랩퍼 코드
    c# Winform 개발/웹 자동화 2022. 9. 30. 13:36

     

     

    테스트 하면서 필요했던 기능들 간단하게 Wrapper 만들어봄

     

    /*
         * 
         * test wrapper by bw50233
         * 
         */
        internal class SeleniumWrapper
        {
            static int sleepMS = 300;
    
            // 엘리먼트가 있는지 체크. 대기용도로 씀
            public static bool SelectElement(WebDriverWait wait, string xPath)
            {
                bool result = false;
                try
                {
                    IWebElement elementID = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xPath)));
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 버튼 클릭
            public static bool ButtonClick(WebDriverWait wait, string xPath)
            {
                bool result = false;
                try
                {
                    IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xPath)));
                    element.Click();
                    Thread.Sleep(sleepMS);  // 빼도 되는지 확인 필요
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    throw new Exception(); // Exception 발생 후 프로그램 종료시키고자 추가
                }
    
                return result;
            }
            
            // Input에 텍스트 입력
            public static bool ClearAndInputText(WebDriverWait wait, string xPath, string text)
            {
                bool result = false;
                try
                {
                    IWebElement elementID = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xPath)));
                    elementID.Clear();
                    elementID.Click();
                    Thread.Sleep(sleepMS);
                    elementID.SendKeys(text);
    
                    // 텍스트가 채워질때까지 대기
                    for (int i = 0; i < 50; i++)
                    {
                        if (elementID.GetAttribute("value").Length > 0)
                            break;
                        Thread.Sleep(10);
                    }
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 콤보박스 선택
            public static bool SelectCombobox(WebDriverWait wait, string xPath)
            {
                bool result = false;
                try
                {
                    IWebElement elementID = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xPath)));
                    elementID.Click();
                    Thread.Sleep(sleepMS);
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 윈도우 이동
            public static bool SwitchWindow(ChromeDriver driver, string handle)
            {
                bool result = false;
                try
                {
                    driver.SwitchTo().Window(handle);
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 프레임 이동
            public static bool SwitchFrame(ChromeDriver driver, WebDriverWait wait, string xPath)
            {
                bool result = false;
                try
                {
                    if(xPath.Length <= 0) // 첫번째 프레임으로 이동
                    {
                        driver.SwitchTo().DefaultContent();
                    }
                    else
                    {
                        var iFrame = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xPath)));
                        driver.SwitchTo().Frame(iFrame);
                    }
    
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
            // 프레임 이동
            public static bool SwitchFrame(ChromeDriver driver, IWebElement elementFrame)
            {
                bool result = false;
                try
                {
                    driver.SwitchTo().Frame(elementFrame);
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 메인핸들 얻기
            public static string GetMainHandleByTitle(ChromeDriver driver, string mainTitle)
            {
                string result = "";
                try
                {
                    foreach (string handle in driver.WindowHandles)
                    {
                        IWebDriver windowDriver = driver.SwitchTo().Window(handle);
                        if (windowDriver.Title.Contains(mainTitle))
                        {
                            result = handle;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 메인 윈도우외 다른 팝업 윈도우 닫기
            public static bool OtherCloseByTitle(ChromeDriver driver, string mainTitle)
            {
                bool result = false;
                try
                {
                    foreach (string handle in driver.WindowHandles)
                    {
                        IWebDriver windowDriver = driver.SwitchTo().Window(handle);
                        if (!windowDriver.Title.Contains(mainTitle))
                        {
                            windowDriver.Close();
                        }
                    }
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
    
            // 얼럿 자동 확인
            public static bool AcceptAlert(ChromeDriver driver)
            {
                bool result = false;
                try
                {
                    driver.SwitchTo().Alert().Accept();
                    result = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
    
                return result;
            }
        }

     

     

     

    300x250

    댓글

Designed by Tistory.