반응형

Appium은 네이티브, 하이브리드 및 웹 애플리케이션의 자동화된 테스트를 수행하기 위한 오픈 소스 도구입니다. 

Appium은 표준 API를 사용하여 iOS 및 Android 플랫폼에서 테스트 케이스 생성을 허용하는 크로스 플랫폼 특성 및 기본적으로 Selenium에서 요소를 추출하고 Selenium의 WebDriver를 통해 iOS 및 Android 앱과 적극적으로 상호 작용하기 위해 내부적으로 JSON Wire Protocol을 사용합니다 .

서버-클라이언트 아키텍처를 통해 REST API를 사용하는 웹 서버는 클라이언트에 직접 연결되어 명령을 수신하고 지정된 모바일 장치를 통해 추가로 실행합니다. 

Appium은 Node.js로 작성된 HTTP 서버이기 때문에 주어진 명령을 실행한 결과를 번거로움 없이 분석할 수 있습니다. Appium 테스트의 중요한 이점 중 하나는 자동화를 위해 앱을 다시 컴파일하는 수고를 덜어준다는 것입니다. Selenium WebDriver의 광범위한 사용으로 이 도구는 모바일 애플리케이션 테스트의 확실한 기술과 결합된 API를 확장 합니다 .

 

Appium을 모바일 자동화 도구로 사용하는 이유는?

이미 알고 있듯이 Appium은 동일한 API를 사용하여 Windows, iOS 및 Android를 포함한 여러 플랫폼에서 테스트를 작성할 수 있는 크로스 플랫폼 도구입니다. 추가하기 위해 Appium을 사용하면 휴대폰, 태블릿 등과 같은 실제 장치에서 자동화된 테스트를 실행할 수 있습니다.

모바일 앱 테스팅 서비스 제공자들 사이에서 Appium은 모바일 앱의 회귀 테스팅을 단순화 하는 데 도움이 되기 때문에 인기가 있습니다 . 이 측면은 주로 새로운 기능과 관련하여 자주 업데이트되는 대규모 모바일 앱에 중점을 둡니다.

다음은 Appium이 모바일 자동화를 위한 가장 안정적인 도구임을 강조하는 몇 가지 필수 지침입니다.

  • Appium은 Selenium Server와 유사한 백그라운드에서 실행하여 서버로 작동합니다.
  • 이 모바일 테스트 자동화 도구는 TestNG 테스트 프레임워크와 쉽게 일치할 수 있습니다.
  • Appium은 다양한 프로그래밍 언어와 다양한 유형의 프레임워크를 사용하여 개발된 모든 모바일 앱을 자동화하기에 충분히 효율적입니다.
  • Appium은 내장 UI Automator로 구성되어 있습니다. 그 기능은 자세한 정보 기록을 제공하고 포괄적인 보고 구조를 생성하는 것입니다.
  • 이 모바일 테스트 도구를 사용하면 테스트 코드에서 백엔드 API 및 데이터베이스에 대한 전체 액세스 권한을 얻어 제어할 수 있습니다.

Appium 작동 방식

Appium은 Node.js 플랫폼을 사용하여 작성된 'HTTP 서버'입니다. Webdriver JSON 유선 프로토콜을 사용하여 iOS 및 Android 세션을 구동할 수 있습니다. Appium Server를 초기화하기 전에 시스템에 Node.js를 사전 설치하는 것이 필수적입니다.

Appium이 다운로드되고 성공적으로 설치되는 즉시 서버가 머신에 배치되어 REST API를 노출합니다. 그 작업은 모바일 장치를 통해 해당 명령을 실행하기 위해 클라이언트로부터 직접 명령 요청과 함께 연결을 수신하는 것입니다. 그 결과 HTTP 응답을 통해 응답합니다. 또한 이 요청을 다시 실행하기 위해 모바일 테스트 자동화 프레임워크를 사용하여 해당 앱의 사용자 인터페이스를 작동합니다.

 

모바일 테스트 자동화를 위한 Appium의 이점

아래에 언급된 다른 모바일 테스트 자동화 도구와 비교할 때 Appium의 가장 중요한 이점은 다음과 같습니다.

  • Appium은 모든 플랫폼을 포괄하는 표준 자동화 API를 사용합니다. 따라서 테스트 중인 애플리케이션을 수정할 필요가 없습니다.
  • Appium은 거의 모든 유형의 테스트 프레임워크와 호환됩니다.
  • 모바일 자동화 도구는 Java, PHP, Node, Ruby 및 Python을 포함한 다양한 프로그래밍 언어를 지원합니다.
  • 흥미롭게도 Java, JavaScript 및 Objective-C와 같은 다양한 프로그래밍 언어로 작성된 테스트 스크립트는 웹 드라이버와 조정됩니다.
  • 작동을 위해 모바일 장치에 Appium을 설치할 필요가 없습니다.
  • Appium은 네이티브 앱과 적극적으로 작업하기 위해 Selenium WebDriver JSON 유선 프로토콜을 사용합니다.

Appium 모바일 자동화 테스트 도구의 일반적인 이점은 다음과 같습니다.

 1. 무료

Appium은 쉽게 다운로드할 수 있는 무료 오픈 소스 도구입니다. 장치에 추가 설치가 필요하지 않으며 광범위한 커뮤니티 지원을 관리합니다.

 

2. 단순화된 작동

Appium은 Selenium WebDriver와 호환되므로 거의 모든 Selenium 기능에 액세스할 수 있습니다. 셀레늄 사용 이론에 대한 더 나은 지식을 얻기 위해 Appium은 이해하고 구현하기가 매우 쉽습니다.

 

3. 플랫폼 간 유연성

코드 변경 없이 iOS와 Android 모두에서 Appium 테스트를 실행할 수 있습니다. 또한 여러 플랫폼을 동시에 다루는 여러 테스트를 실행할 수도 있습니다.

 

4. CI 도구와 통합

Appium이 거의 모든 CI 도구와 통합될 수 있다는 것은 큰 장점입니다. (ex. Bamboo, Jenkins 등)

 

5. 녹음 및 재생

다른 자동화 도구와 마찬가지로 Appium은 녹음 및 재생 도구의 편리함을 제공합니다. 

 

결론

이 블로그에 이미 충분한 세부 정보가 나와 있으므로 Appium이 모바일 테스트 자동화에서 상당한 시장 점유율을 확보했다고 해도 과언이 아닙니다. 여러 옵션을 사용할 수 있으므로 Appium 테스트는 다양한 장치 및 OS 버전에서 실행할 수 있는 최고입니다. 앱 개발자와 테스터가 합쳐진 말을 들으면 Appium 테스트를 만드는 것이 쉽고 유연하게 구현할 수 있습니다.

반응형
반응형

wait 는 말 그대로 '기다리라' 는 뜻입니다. 여기에는 2가지 타입이 있습니다. 바로 implicitly wait 과 explicitly wait 입니다.

하지만 여기서 implicitly wait 과 explicitly wait 를 배우기 전에 time.sleep 을 배우겠습니다.

time.sleep

time.sleep 은 물리적인 시간을 기다리는 명령어입니다.
사용하는 방법은 time.sleep(초) 를 사용하여 구글 웹페이지가 열린 후 1초, 5.5초, 10초를 기다립니다.

import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('start-maximized') chrome_options.add_argument('incognito') driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) driver.get(url='https://www.google.com/') time.sleep(1) # 1초 기다림 time.sleep(5.5) # 5.5초 기다림 time.sleep(10) # 10초 기다림 driver.quit()

컴퓨터의 사양과 상관없이 무조건 입력한 초가 지나야 다음 동작을 합니다. 그렇기에 적절하게 상황에 따라 사용하면 좋습니다.

 

Implicitly Wait

implicitly wait 는 웹페이지가 로딩 될때까지 기다리고 다음 동작을 합니다. 쉽게 설명하자면, 예를들어 구글 웹페이지를 오픈했는데 웹페이지를 불러올 때까지 최대 implicitly_wait(초) 까지 기다리라는 뜻입니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('start-maximized')
chrome_options.add_argument('incognito')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

driver.get(url='https://www.google.com/')
driver.implicitly_wait(10) # 10초까지 기다리고 다음 동작

driver.quit()

위 예제에서 implicitly_wait(10)을 했는데 10초동안 웹페이지가 로딩될때까지 기다리고 10초가 넘어가면 웹페이지가 로딩이 됐던 안됐던 다음 명령어를 실행하겠다 는 뜻입니다. 이 또한 상황에 적정한 시간을 설정하면 됩니다.

time.sleep 과 implicitly_wait가 다른 점은 컴퓨터 성능이 좋아서 웹페이지 로딩하는데 1초가 걸렸습니다. 하지만 time.sleep은 무조건 10초를 기다리고 다음 동작은 하고, implicitly_wait는 1초가 됐을 때 다음 동작을 합니다.

Explicitly Wait

implicitly_wait의 경우는 모든 웹페이지가 호출될 때까지 기다리는지만, 컴퓨터 환경(PC성능 또는 서버, 네트워크 등)에 따라 전체가 아닌 일부가 먼저 노출되는 경우가 있습니다. (참고..이것을 동적 DOM이라고 부릅니다.)

예를들어서 implicitly_wait를 사용하여 웹페이지는 1초만에 넘어왔는데 넘어온 웹페이지의 일부분이 자바스크립트로 구현되어 있어서 그 일부분이 화면상에서 렌더링 되느라 비교적 늦게 브라우저에 표시되었다고 가정하면 (ex. 쿠팡 또는 광고 노출) 동작하는데 문제가 발생합니다.

이러한 문제를 해결하기 위해서 explicitly_wait 를 사용합니다. 즉, 내가 설정한 것이 표시가 될때까지 뭐뭐 할때까지 기다려라 라는 의미입니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('start-maximized')
chrome_options.add_argument('incognito')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

driver.get(url='https://www.google.com/')

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "gNO89b")))

driver.quit()

time.sleep 과 implicitly_wait 에는 괄호 안에 초를 사용하였지만, explicitly_wait는 사용하는 방법이 조금 다릅니다.
element 라는 변수에 WebDriverWait(driver, 10) 즉, driver는 셀레니움 구동한 드라이버가 10초까지 설정한 무엇이 나타날때까지 기다린다는 뜻입니다.
그 다음 .until(EC.presence_of_element_located((By.CLASS_NAME, “gNO89b”))) 의 EC.presence_of_element_located라는 것은 괄호안에 요소가 나타날때까지 기다리라는 의미인데, 괄호안에 요소는 하기와 같습니다.
(By.ID, ‘아이디이름’)
(By.CLASS_NAME, ‘클래스명’)
(By.XPATH, ‘xpath경로’)
(By.NAME, ‘네임명’)
(By.CSS_SELECTOR, ‘CSS셀렉터’)
(By.PARTIAL_LINK_TEXT, ‘텍스트링크일부분’)
(By.LINK_TEXT, ‘텍스트링크’)

EC.presence_of_element_located 말고 종류가 많이 있습니다.

EC.title_is(...)
EC.title_contains(...)
EC.presence_of_element_located(...)
EC.visibility_of_element_located(...)
EC.visibility_of(...)
EC.presence_of_all_elements_located(...)
EC.text_to_be_present_in_element(...)
EC.text_to_be_present_in_element_value(...)
EC.frame_to_be_available_and_switch_to_it(...)
EC.invisibility_of_element_located(...)
EC.element_to_be_clickable(...)
EC.staleness_of(...)
EC.element_to_be_selected(...)
EC.element_located_to_be_selected(...)
EC.element_selection_state_to_be(...)
EC.element_located_selection_state_to_be(...)
EC.alert_is_present(...)

위 방법 중에서 가장 많이 사용하는 것은 EC.presence_of_element_located 와 EC.element_to_be_clickable 이니 상황에 따라 사용하면 됩니다.

즉, 위 3가지 방법 중 상황에 맞는 것을 자유롭게 사용하시면 됩니다.

참조 :

 

GitHub - grafeen/selenium_ex04

Contribute to grafeen/selenium_ex04 development by creating an account on GitHub.

github.com

 

반응형
반응형

테스트 자동화에서 가장 많이 사용하는 기능 5가지를 선정하라면, 하기와 같다.

  • get( )
  • wait( )
  • find_element( )
  • send_keys( )
  • click( )

 

1. get( )

get 명령은 새 브라우저를 시작하고 크롬 웹드라이버 에서 주어진 URL을 엽니다 . 단순히 문자열을 지정된 URL로 사용하고 테스트 목적으로 엽니다.

Selenium IDE를 사용한다면 open 명령어와 비슷합니다.

예시:

driver.get("https://google.com");

'드라이버'는 모든 작업을 수행할 Chrome 웹 드라이버이며 위의 명령을 실행한 후 다음과 같이 표시됩니다.

 

wait()

wait 는 말 그대로 ‘기다리라’는 뜻이다. implicitly wait 또는 explicitly wait 를 사용하는데, 이 부분은 다음 시간에 배우기로 하고 많이 사용하는 것 중에 하나다 라고 기억해주면됩니다.

find_element()

이 기능은 페이지의 요소에 액세스하려는 경우에 중요합니다. 검색을 수행하기 위해 "Google 검색" 버튼에 액세스하려고 한다고 가정해 보겠습니다.

요소에 액세스하는 방법은 여러 가지가 있지만 내가 선호하는 방법은 요소의 XPath를 찾는 것입니다. XPath는 웹 페이지에서 요소의 최종 위치입니다.

F12를 클릭하면 페이지를 검사하고 현재 있는 페이지에 대한 배경 정보를 얻을 수 있습니다.

 
 

선택 도구를 클릭하면 요소를 선택할 수 있습니다.

검색창을 왼쪽 버튼으로 클릭하면 파란색으로 표시된 부분이 노출됩니다. 오른쪽으로 클릭하고 "Copy Xpath" 를 선택하면 검색창의 Xpath 가 복사됩니다. 

self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div[2]/div[2]/input')

새 세션의 요소가 변경되고 다음에 스크립트를 수행할 때 작동하지 않으면 일반 XPath가 변경될 수 있기 때문에 일반 XPath보다 전체 XPath를 선호합니다.

다른 find_element 함수의 개요입니다. 

 

send_keys( ) 및 click( )

Send_keys( ) 와 click( ) 기능은 find_element 기능을 사용하여 선택한 필드에 텍스트를 입력 또는 클릭을 하는 데 사용됩니다.

Google에 "testing"를 입력하고 Google 로고를 클릭한다고 가정해 보겠습니다. 

google_tray = driver.find_element_by_xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div[2]/div[2]/input')
google_search = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/picture/img')

google_tray.send_keys("testing")
google_search.click()

요소를 각각의 변수에 저장한 다음 더 명확하게 하기 위해 요소에 대해 기능을 수행했습니다.

결국 다음과 같이 끝납니다.

 

 

반응형
반응형

도구 통합

조직은 소프트웨어 제공 프로세스의 모든 측면과 관련된 분야를 함께 융합하는 이점을 깨달았습니다. 따라서 이제 모든 도구의 통합이 매우 중요합니다. 테스트 활동을 위해 Jira, Jenkins 및 Github 통합은 현재 회사에 가장 중요한 통합입니다. 그러나 확실히 미래에는 이 개념에 더 많은 초점이 맞춰질 것입니다. 그리고 우리는 더 다양한 기능이 풍부한 도구를 만날 것입니다.

테스트 자동화 도구의 진화

Agile 및 DevOps 의 부상으로 인해 우리는 앞으로 테스트 자동화를 점점 더 많이 사용하게 되었습니다. 따라서 회사는 테스트 자동화 및 자동화 테스터에 더 많은 관심을 기울이기 시작합니다. 테스터들은 "Functional or Regression Testing"(75%)에서 스크립팅과 테스트 자동화를 가장 많이 사용한다고 말합니다.그런 다음 CI/CD가 그 뒤를 따릅니다 (49%) . (Practitest, 2021 Report) 이러한 요구에 부응하여 Selenium, Katalon, TestComplete와 같은 자동화 도구는 새로운 기능으로 계속 진화하고 있습니다.

테스트를 위한 AI 및 ML

테스트 자동화에는 지속적인 모니터링이 필요합니다. 하나의 웹 요소가 변경되고 테스트 스위트가 실패합니다. 최근 AI 기능의 최근 발전으로 자동화 테스트의 많은 환상적인 개선 사항이 나타났습니다. AI와 ML에 테스트 자동화를 개선할 잠재력이 많다는 것은 너무나 분명하지만, 그 개념은 아직 초기단계입니다. 아직 조직의 비즈니스 모델로 전환되지 않았습니다.

AI와 ML을 사용하여 테스트에서 일상적인 작업의 수를 줄일 수 있다는 것을 알고 있습니다. 예를 들어 테스트 케이스를 자동으로 생성하고 중복 테스트 케이스를 찾을 수 있습니다. 일반적으로 우리 프로젝트에서는 웹 페이지의 UI 요소/로케이터가 크게 이동되거나 수정됩니다. 그리고 우리는 이제 추출을 위해 일부 AI 기반 솔루션을 사용합니다. 적용 범위 및 추적 가능성을 위한 일부 AI 기반 솔루션도 있습니다. 기존 테스트 스위트에서 다루지 않는 코드를 자동으로 감지합니다. 

특정 테스트 결과/보고서를 사용하는 새로운 AI/ML 알고리즘은 조직에 매우 가치 있고 의미 있는 데이터를 생성하기 위해 개발될 것입니다. 그건 그렇고, 우리는 빠른 교차 도구 통합의 도움을 잊어서는 안 됩니다.Edge 컴퓨팅의 도움으로 조직은 A/B 테스트의 결과인 데이터를 수집할 수 있습니다. 이 전략을 사용하면 조직에서 자세한 검사를 위해 데이터를 클라우드로 직접 전송할 수 있습니다. 우리는 계속해서 엄청난 양의 데이터를 생성합니다. 이제 인기 있는 애플리케이션에서 A/B 테스트를구현했다고 생각해 보십시오.그리고 이 인기 있는 애플리케이션의 테스트 결과/보고서에 의해 생성된 모든 데이터에 대해 생각해 보십시오.

사실, 데이터를 소유하고 있다면 대부분의 모든 것에 대한 사람들의 선호도에 대한 아이디어를 직접 소유하게 됩니다. 의미 있는 데이터의 소유는 소프트웨어 세계에서 가장 가치 있는 것 중 하나가 되었습니다. 데이터는 애플리케이션, 카메라, 개인 장치, 기업 장치, 드론, 스마트 가전제품, 웨어러블 기술 등에서 계속 발생합니다. 에지 장치에 배포된 AI 및 ML은 데이터와 실시간으로 상호 작용하여 귀중한 통찰력을 제공합니다. 오늘날에는 엣지에서 실시간 분석을 달성하기 위해 점점 더 정교해졌습니다. 그리고 의미 있는 데이터가 클라우드로 전송되어 AI와 ML이 사용자의 행동 패턴을 관찰하도록 훈련할 수 있습니다. 물론 데이터 양, 확장성, 데이터 정확성, 데이터 일관성, 데이터 유형, 데이터 사용, 개인의 개인 정보 등에 대한 몇 가지 우려가 있습니다.

자동화된 시각적 테스트

자동화된 시각적 테스트 점차적으로 소프트웨어 테스팅 세계에서 큰 트렌드가 됩니다. 원활한 사용자 경험을 만들고 유지하는 것은 큰 일입니다. 이 부분에는 예술적인 측면도 있다. 기업은 빠르게 변화하는 세상에서 지속적으로 배포 및 출시하고 있습니다. 그렇다면 실시간으로 모든 세부 사항을 처리하는 방법은 무엇입니까? 자동화된 시각적 테스트를 통해 애플리케이션이 예상대로 표시되는지 확인하는 데 시간을 절약할 수 있습니다. Visual AI로 알려진 인공 지능을 사용하여 애플리케이션에 대한 최종 사용자의 행동을 가능한 한 사실적으로 재현하려고 합니다. 우리는 앞으로 이 분야에서 AI 기반 도구를 더 많이 보게 될 것입니다. 이러한 도구는 시각적 회귀 테스트를 자동화하고 시각적 차이를 분석하여 시각적 버그의 근본 원인을 파악하는 데 도움이 됩니다. 기본적으로 그들은 인간의 눈과 뇌의 움직임, 선택을 복제하려고 합니다. Applitools Eyes 또는 Tricentis 가 이 개념의 현재 샘플입니다.

다양한 테스트 환경

사물 인터넷 (IoT) 의 급속한 발전으로 더 많은 소프트웨어 시스템이 다양한 환경에서 작동하고 있습니다. 우리는 점점 더 다양한 장치, 하드웨어 및 운영 체제를 보유하고 있습니다. 이제 호환성 테스트에 훨씬 더 많은 시간이 소요될 것입니다. 그리고 이러한 요구에 부응하여 적합한 자동화 테스트 제품이 신속하게 나타나야 합니다. 이 점에서 놀랍게도 테스트 활동의 경우 ARBT(Augmented Reality-Based Testing)가 테스터에게 시간을 절약할 수 있는 솔루션이 될 수 있습니다. (ARBT) 는 증강 현실과 소프트웨어 테스팅을 결합한 테스트 방법입니다. 앞으로 특히 운동 기술이 필요한 테스트에서 이 솔루션을 더 많이 볼 수 있습니다.

스크립트 없는 테스트 자동화

기업의 또 다른 중요한 측면은 '스크립트 없는 테스트 자동화'에 더 집중하고 있다는 것입니다. 'Low-Code' 개념은 미래 트렌드가 될 것입니다. Gartner는 2024  까지 개발 활동의 65% 가 Low-Code 가 될 것이라고 예측합니다. 사실 팀의 모든 사람이 코드를 더 쉽게 읽을 수 있도록 하려면 노력과 시간이 필요합니다.

테스트 인프라, 숙련된 개발자 테스터의 고용 및 교육을 위해 대규모 투자가 필요합니다. 현재 우리 삶은 코로나 19라는 전염병으로 인하여 원격 근무의 도입이 앞당겨졌습니다. 이러한 원격 환경으로 인해 팀워크와 의사소통이 어려워졌습니다. 구현 프로세스는 더 느리고 지식 공유는 더 적으며 무언가를 변경하려면 더 많은 회의가 필요합니다. 그렇기 때문에 현재 테스터와 회사에서 코드 가독성과 유지 관리가 훨씬 더 어렵습니다. 회사 입장에서는 더 높은 품질의 코드를 위한 내부 품질 기준도 까다롭습니다. 그래서 테스트 자동화의 확장성을 극대화하기 위해 'Scriptless Test Automation'을 도입했습니다. 스크립트 없는 테스트 자동화를 통해 테스터는 코딩에 대해 걱정할 필요가 없습니다. TestCraft, Ranorex Studio, Accelq, Zeuz, Robot Framework는 이를 위한 몇 가지 예제 프레임워크 도구입니다.

이러한 미래 동향은 조직이 신속한 릴리스 주기를 통해 소프트웨어 제품을 완벽하고 빠르게 제공하는 데 도움이 될 것입니다. 

반응형

'software testing' 카테고리의 다른 글

APK 무료로 다운받을 수 있는 사이트  (0) 2023.01.29
Jenkins 설치 및 설정  (0) 2016.08.22
정적 테스트와 동적 테스트  (0) 2016.02.20
리그레션 테스트  (0) 2016.01.04
What is testware? | 테스트웨어란?  (0) 2015.12.29
반응형

webdriver.ChromeOptions() 함수를 실행할 때 크롬 드라이버의 경로만 매개변수로 지정 해줍니다.

여기에 chrome_options 매개변수를 추가로 입력하면 브라우저 크기, 시크릿모드, headless 모드 등 다양한 옵션을 설정할 수 있습니다. 아래는 대표적으로 많이 사용하는 옵션들로 맨 하단에 참고 부분에는 좀 더 많은 옵션들을 확인할 수 있습니다.

 

  • headless : headless 모드 설정
  • disable-gpu : gpu를 사용 안하도록 설정
  • lang=ko_KR : 한국어로 실행되도록 설정
  • start-maximized : 브라우저 최대화
  • window-size=1920,1080 : 1920*1080 브라우저 크기로 오픈
  • incognito : 시크릿모드
  • disable-popup-blocking : 팝업 차단 해제

아래 간단한 예시로 크롬 브라우저를 실행할 때, 창을 최대화하면서 시크릿 모드로 구글 사이트로 진입하는 코드입니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = webdriver.ChromeOptions() # 크롬 옵션 객체 생성
chrome_options.add_argument('start-maximized')
chrome_options.add_argument('incognito')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

driver.get(url='https://www.google.com/')

driver.quit()

 

참고 : 

 

GitHub - grafeen/selenium_ex03

Contribute to grafeen/selenium_ex03 development by creating an account on GitHub.

github.com

 

 

List of Chromium Command Line Switches « Peter Beverloo

 

peter.sh

 

 

반응형
반응형

'Selenium webdriver 로 웹페이지 띄우기' 를 진행하며 chrome webdriver를 실행했는데, 아래와 같은 warning이 뜨는 경우가 있습니다.

 

DeprecationWarning: executable_path has been deprecated, please pass in a Service object 

 

이런 경우 service 키워드를 사용하면 됩니다.

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(url='https://www.google.com/')

driver.quit()

 

아래는 실행 결과후 console 창에 

 

참고 : 

반응형
반응형

Selenium webdriver로 웹페이지 띄우기(1) 에서는 chromedriver를 직접 다운 받아서 폴더에 넣고 경로를 지정해서 웹페이지 띄우는 방법을 보여드렸습니다.

 

chromedriver를 다운 받는 것은 어느 사이트를 보던 흔하게 있는 예제였는데요, 제가 이번에 보여드릴 예제는 webdriver-manager 라는 패키지를 설치함으로서 chromedriver 설치 및 경로 지정 없이 사용하는 방법을 알려드리겠습니다.

 

먼저, 새로운 프로젝트를 만들거나 혹은 지난 시간에 했던 프로젝트에 새로운 python 파일을 만듭니다.

 

저는 새로운 프로젝트를 만들었습니다. (새로운 프로젝트 생성 시, selenium 을 다시 설치하셔야 합니다.)

지난 시간에 selenium 설치하는 방법을 터미널을 통해 패키지를 설치하거나 pycharm IDE의 python interpreter 를 통해 패키지를 설치하는 방법을 알려드렸는데요, 이번에도 동일하게 어떤 것을 사용하시던 무방합니다.

 

다시 한번 복습겸 방법을 알려드리면 아래와 같습니다.

 

 첫번째 : 터미널로 pip install webdriver-manager 를 입력하고 엔터를 치면 설치가 됩니다.

 두번째 : File -> Settings -> Project: XXXX 로 적혀있는 부분 클릭 -> Python Interpreter 클릭 -> 여기서 [+] 버튼 클릭 -> 검색창에 webdriver-manager를 입력 후 [Install Package] 버튼을 클릭하면 됩니다.

webdriver-manager 패키지가 설치되고 나면 팝업창을 전부 닫아주세요.

 

저는 이전 시간과 마찬가지로 main.py 를 전부 지우고 작성하겠습니다.

하기와 같이 명령어를 입력하시면 됩니다.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url='https://www.google.com/')

driver.quit()

전체를 보면 아래와 같습니다.

실행을 해보도록 하겠습니다. 실행은 마우스 오른쪽 버튼을 클릭하고, Run 'main' 하시거나 단축키 Control + Shift + F10 을 누르면 크롬 브라우저로 구글 웹페이지가 열렸다가 닫히는 것을 보실 수 있습니다. 

이전과 달라진 소스코드는 아래 영역으로, chromedriver를 다운 받아서 경로 지정하는 부분이 ChromeDriverMaanager().install() 로 경로 지정할 필요없이 알아서 설치가 되는 장점이 있습니다.

driver = webdriver.Chrome(ChromeDriverManager().install())

 

소스코드 : 

 

GitHub - grafeen/selenium_ex02

Contribute to grafeen/selenium_ex02 development by creating an account on GitHub.

github.com

 

 

반응형
반응형

지난 시간에는 Selenium 설치방법 에 대해 알아봤습니다.

 

웹페이지를 브라우저로 열기 위해서는 크롬의 경우 chromedriver, 파이어폭스의 경우 geckodriver와 같은 webdriver 프로토콜이 필요합니다. (자세한 설명은 selenium 웹페이지에서 보시면 나와 있으니 궁금하신 분은 검색으로...)

 

거의 모든 예시는 chrome 브라우저를 가지고 들으며, 실제적으로 많이 사용하기 때문에 저 또한 chrome 브라우저를 통해 보여드리겠습니다.

 

chromedriver를 통해 웹페이지를 띄우는 방법은 2가지가 있습니다.

 

일단 첫번째는 많이들 사용하는 방법으로 chromedriver를 다운 받아서 경로를 지정하여 호출하는 방법입니다.

 

1. 구글에서 chromedriver를 입력하시면, 아래와 같이 ChromeDriver 웹페이지가 있습니다. 이걸 클릭해주세요.

2. ChromeDriver 사이트에 들어가면 Current Releases 에 각종 버전들이 있습니다. 일단 어떤 버전들이 있구나 보시면 됩니다.

3. 그리고 내가 사용하는 크롬 브라우저를 실행 시키고, 브라우저 창에 chrome://settings/help 를 입력해주면 현재 내가 사용하는 버전을 알 수 있습니다.

저는 96.04664.93 버전을 사용하고 있네요. (21년 12월 기준)

4. 현재 브라우저 버전을 기억하고 ChromeDriver 웹페이지를 보시면 96.04664.45 버전을 볼 수 있습니다. 맨 뒤의 숫자들보다는 맨 앞의 숫자를 맞춰서 다운 받아주시면 됩니다. (예를 들면 내가 현재 96.0.4664.93 버전인데 97.04692.36 버전을 받으면 동작이 제대로 안되는 경우가 발생합니다.)

 

96.04664.45 버전을 클릭하면 아래와 같이 각종 OS에 맞는 버전을 다운 받습니다. 저는 win10이기 때문에 chromedriver_win32.zip을 받았습니다.

5. 받은 파일의 압축을 풀면 chromedriver.exe 가 나오는데, 이걸 이전 시간에 만들었던 프로젝트 폴더 내에 넣어줍니다. (chromedriver.exe 파일 앞에 물음표가 있는데 무시하셔도 됩니다.)

6. main.py 파일을 사용해보겠습니다. main.py 내용 전부 삭제하시고, 하기와 같은 명령어를 입력하시면 됩니다.

(엄청 단순하죠? 처음이니까...쉬엄쉬엄...가야죠)

from selenium import webdriver

driver = webdriver.Chrome('./chromedriver.exe')
driver.get(url='https://www.google.com/')

driver.quit()

전체를 보면 아래와 같습니다.

7. 실행을 해보도록 하겠습니다. 실행은 마우스 오른쪽 버튼을 클릭하고, Run 'main' 하시거나 단축키 Control + Shift + F10 을 누르면 크롬 브라우저로 구글 웹페이지가 열렸다가 닫히는 것을 보실 수 있습니다. 

 

코드를 보면, 

먼저 webdriver.Chrome() 함수를 사용하여 드라이버를 로드합니다. 이걸 driver라는 변수에 저장합니다.

webdirver.Chrome() 함수 내에는 pythonProject2 폴더내에 바로 chromedriver.exe 파일이 위치하기 때문에 ./ 를 사용했습니다. 

그리고 get(url) 함수를 사용하여, 해당 URL을 브라우저에서 띄우게 됩니다.

마지막으로 driver.quit() 를 사용하여 브라우저를 닫게 됩니다.

 

소스코드 :

 

GitHub - grafeen/selenium_ex01

Contribute to grafeen/selenium_ex01 development by creating an account on GitHub.

github.com

 

반응형
반응형

앞서 작성한 포스팅에서 Selenium Suite 패키지 중 가장 일반적으로 사용하는 것은 Selenium Webdriver 입니다.

Selenium 을 검색해보면 수 많은 자료들이 있는데 가장 기본적인 selenium webdriver 를 설치하는 방법이죠.

저 또한 설치하는 방법부터 시작하려고 합니다.

 

준비물 : Windows 환경, Pycharm

 

1. 최신 버전의 Python을 다운 받아서 설치합니다. (2021년 12월 6일 현재 3.10.0 버전)

 

2. Jet Brain사이트에 가서 Community 버전의 Pycharm IDE를 다운 받아서 설치합니다.

-> Pycharm 이란?  컴퓨터 프로그래밍, 특히 Python 언어에 사용되는 통합 개발 환경입니다.

 

3. Pycharm IDE를 실행 시킵니다.

File -> New Project -> (Location 변경 가능) Create 버튼을 클릭합니다.

프로젝트가 생성되면 하기의 이미지와 같이 나옵니다. 

4. selenium 을 설치하기 위해서 2가지 방법이 있습니다. 

 첫번째 : 터미널로 pip install selenium 입력하고 엔터를 치면 설치가 됩니다.

 두번째 : File -> Settings -> Project: XXXX 로 적혀있는 부분 클릭 -> Python Interpreter 클릭하면, 아래와 같은 화면이 나옵니다.

여기서 [+] 버튼 클릭 -> 검색창에 selenium 입력 후 [Install Package] 버튼을 클릭하면 됩니다.

 

반응형
반응형

테스트 자동화 도구는 상용 및 오픈소스가 있지만 Selenium 이라는 오픈소스를 전세계적으로 가장 많은 사람들이 사용하고 있습니다.

 

그 이유는 다양한 환경에서 지원하며 요소 로케이터를 Xpath, ID, CSS 와 같은 다양한 방식으로 지원. Java, Perl, PHP 등과 같은 다양한 언어를 지원하고 있으며 인터넷에서 많은 정보가 공개되어 있기 때문입니다.

 

Selenium은 단순한 도구나 유틸리티가 아니라 여러 테스트 도구의 패키지이며 이와 같은 이유로 Suite라고합니다. 이러한 각 도구는 다양한 테스트 및 테스트 환경 요구 사항을 충족하도록 설계되었습니다.

 

Suite 패키지는 다음 도구 세트로 구성됩니다.

  • Selenium 통합 개발 환경 (IDE) – Selenium IDE는 기록 및 재생 도구로 테스트 케이스를 컴퓨터가 실행할 수 있는 스크립트로 변환하는 방법 중 대표적인 것으로 Firefox Plugin을 통해 구현됩니다.
  • Selenium RC – Selenium Webdriver가 나오기전에 있었던 버전으로 사용자가 원하는 프로그래밍 언어로 테스트 스크립트를 작성할 수있는 서버입니다.
    > 한정적으로 지원되는 브라우저 내에서 테스트 스크립트를 실행할 수 있습니다.
    > 테스트 스크립트를 실행하기 전에 서버를 시작해야 합니다.
    > Android 애플리케이션 테스트 지원 안합니다.

  • Selenium Grid – Selenium Grid는 여러 플랫폼과 환경에서 동시에 테스트 수행하는데 사용됩니다.

  • Selenium WebDriver – WebDriver는 Selenium RC에 비해 다양한 장점이있는 완전히 다른 도구입니다.
    > WebDriver는 웹 브라우저와 직접 통신하고 기본 호환성을 사용하여 자동화합니다.
    > GUI가 없거나 헤드리스 브라우저인 HtmlUnitDriver를 지원합니다.
    > iPhone / Android 애플리케이션의 테스트를 효율적으로 지원하도록 설계되었습니다.
반응형

+ Recent posts