반응형

1. Mac에서 Terminal 을 실행 시킵니다.

 

2. 설치되어 있는 Python 버전 확인을 합니다.

ls -l /usr/local/bin/python*

 

위의 명령어를 실행하면 하기와 같이 python 버전과 위치가 나옵니다.

 

3. 파이썬 버전 변경하기

현재 python 3.9가 설치되어 있기 때문에 아래와 같이 입력을 해줍니다. 만약 python 3.10이 설치되어 있으면, 3.9대신 3.10으로 넣으면 됩니다.

ln -s -f /usr/local/bin/python3.9 /usr/local/bin/python

 

4. 확인하기

터미널을 종료하고 다시 실행 시켜서 하기와 같이 명령어를 입력하고 엔터를 치면, python 3.9 버전으로 변경되어 있는 것을 볼 수 있습니다.

python --version

 

 

 

 

반응형
반응형

설치 프로그램 목록

Appium을 기동하기 위해서는 아래와 같이 4가지 프로그램 설치가 필요합니다. 

1) JDK(Java Development Kit)
2) Android SDK
3) Node.js
4) Appium

 

1) Appium 설치 

1.Appium 사이트에 들어가서 Appium을 다운로드하여 설치합니다.

(2022년 2월 1일 현재 1.22.0 버전이 최신버전입니다.)

 

Appium: Mobile App Automation Made Awesome.

Appium Philosophy Appium is built on the idea that testing native apps shouldn't require including an SDK or recompiling your app. And that you should be able to use your preferred test practices, frameworks, and tools. Appium is an open source project and

appium.io

 

 
2) Appium 설정
[Edit Configurations] 버튼을 클릭합니다.
 
 

아래와 같이 ANDROID_HOME 과 JAVA_HOME이 나오는지 확인 후 [Save and Restart] 버튼을 클릭합니다.

(만약 설정이 안되어 있을 경우, 환경 변수 설정에서 설정했던 것과 동일하게 입력합니다.)
 

 

이렇게 appium 과정은 끝났습니다~!

반응형

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

기초 - Mobile Web 실행  (0) 2023.01.30
Appium DesiredCapabilities 설정 방법  (0) 2023.01.26
Appium 설치 - Node.js  (0) 2022.03.12
Appium 설치 - Android SDK  (0) 2022.03.11
Appium 설치 - JDK (Window Version)  (0) 2022.03.10
반응형

설치 프로그램 목록

Appium을 기동하기 위해서는 아래와 같이 4가지 프로그램 설치가 필요합니다. 

1) JDK(Java Development Kit)
2) Android SDK
3) Node.js
4) Appium

 

1) Node.js 설치 

1. Node.js에서 최신 Node.js를 다운로드하여 설치합니다.

 

 

다운로드 | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

2. 환경변수 설정

윈도우키를 누르고 "시스템 환경 변수 편집" 을 입력하고 실행합니다.

[환경 변수] 버튼을 클릭합니다.

 

[새로 만들기] 버튼을 클릭합니다.

 

시스템 변수(S) 를 하기와 같이 입력 후 [확인] 버튼을 클릭합니다.

변수 이름 : NODE_HOME

변수 값 : C:\Program Files\nodejs

 

시스템 변수(S)의 Path 를 클릭합니다.

[새로 만들기(N)] 버튼을 클릭합니다.

%NODE_HOME% 를 입력합니다.

[새로 만들기(N)] 버튼을 클릭합니다.

%NODE_HOME%\node_modules\npm\bin 를 입력합니다.

[확인] 버튼을 클릭합니다.

반응형
반응형

설치 프로그램 목록

Appium을 기동하기 위해서는 아래와 같이 4가지 프로그램 설치가 필요합니다. 

1) JDK(Java Development Kit)
2) Android SDK
3) Node.js
4) Appium

 

1) Android Studio 설치 

Android Studio에서 Anroid Studio 를 다운 받아서 설치합니다.

 

 

 

2) Android SDK 설치 

Android Studio 설치가 완료되면 환경 변수 설정이 필요합니다.

 

윈도우키를 누르고 "시스템 환경 변수 편집" 입력 실행합니다.

시스템 속성 > 환경 변수로 들어가서 [새로 만들기] 버튼을 클릭합니다.

새 시스템 변수에 하기와 같이 입력하고 [확인] 버튼을 클릭합니다.

 

변수 이름 : ANDROID_HOME

변수 값 : C:\Users\{컴퓨터 로그인이름}\AppData\Local\Android\Sdk

 

 

환경 변수 편집에서 하기와 같이 입력합니다.

 

[새로 만들기(N)] 버튼을 클릭

%ANDROID_HOME%\platform-tools 입력

[새로 만들기(N)] 버튼을 클릭

%ANDROID_HOME%\tools 입력

[새로 만들기(N)] 버튼을 클릭

%ANDROID_HOME%\tools\bin

[확인] 버튼을 클릭

 

cmd창을 열고, adb를 입력 후 엔터를 치면 하기와 같이 나옵니다.

 

반응형
반응형

설치 프로그램 목록

Appium을 기동하기 위해서는 아래와 같이 4가지 프로그램 설치가 필요합니다. 

1) JDK(Java Development Kit)
2) Android SDK
3) Node.js
4) Appium

 

1) JDK 설치 

   

   1. Oracle의 홈페이지에 가서 JDK 를 다운로드하여 설치합니다. (JDK 다운을 위해서 오라클 회원가입이 필요합니다.)

      링크 : Java Downloads | Oracle

 

 2. 왼쪽 하단의 윈도우 버튼을 클릭하여 "고급" 이라는 단어를 입력하여 "고급 시스템 설정 보기" 를 클릭합니다.

   3. 고급 탭에서 맨 아래에 시스템 환경변수를 클릭합니다.

 

   4. 새로 만들기 버튼을 클릭하여 뜨는 팝업 창에 하기와 같이 입력하고 확인 버튼을 클릭합니다.

      참고로 변수 값은 설치하는 버전에 따라 다를 수 있으니, C:\Program Files\Java\ 경로를 들어가서

      버전을 입력하시면 됩니다.

     

      변수 이름 : JAVA_HOME

      변수 값 : C:\Program Files\Java\jdk-12.0.1 

       

   5. 시스템 변수의 Path 를 더블 클릭합니다.

      6. 새로 만들기 버튼을 클릭하여 하기와 같이 입력하고 확인 버튼을 클릭합니다.

         

         %JAVA_HOME%\bin

 

   7. 왼쪽 하단의 윈도우 버튼을 클릭하여 cmd 를 입력하여 "명령 프롬프트" 를 클릭합니다.

   8. CMD창에 java -version 을 입력하고 엔터를 쳐서 아래와 같이 자바 버전이 나오면 설치 및 환경 변수 설정 완료입니다. 

 

 

반응형
반응형

이전 포스팅에서는 Locator의 종류를 설명했습니다.

 

이번 시간에는 Locator 사용방법을 설명드리겠습니다.

 

Selenium WebDriver에서 요소 찾기는 Selenium WebDriver 및 WebElement 클래스에서 제공하는 findElement() 및 findElements() 메서드를 사용하여 수행됩니다.

 

1. findElement() 메소드는 한개의 Web Element(웹요소) 를 동작하는데 사용합니다.  

    예 : driver.findElement(By.LocatorStrategy(“Locator Value”)

 

2. findElements() 메소드는 웹 페이지내의 Web Elements(웹요소들)을 동작하는데 사용합니다. 이 메소드는 목록 인터페이스를 통해 WebElement(웹요소) 목록을 반환하며, 이를 반복하고 작업을 수행할 수 있습니다.

 

    예 : List <WebElement> elementname = driver.findElements(By.Locator(“Locator Value”))

 

ID: ID 로케이터는 id 속성 값으로 WebElement를 찾는 데 사용됩니다. 대부분의 ID는 WebElement(웹요소)에 대해 고유합니다. 여기서 id 속성의 값을 매개변수로 전달해야 합니다.

 

사용방법 : driver.findElement(By.id(“element id”))

예 : driver.findElement(By.id(“nav-search-submit-button”))

 

Name: Name 로케이터는 이름 속성 값으로 WebElement를 식별하는 데 사용됩니다. 동일한 이름 로케이터를 가진 여러 요소가 있는 경우 페이지의 첫 번째 요소가 선택됩니다.

 

사용방법 : driver.findElement(By.name(“element name”))

예 : driver.findElement(By.name(“email”))

 

ClassName: ClassName 로케이터는 class 속성 값으로 WebElement를 식별하는데 사용합니다.

 

사용방법 : driver.findElement(By.className (“element class”))

예 : driver.findElement(By.className(“a-button-inner”))

 

 

 

TagName: TagName 로케이터는 findElements() 메소드와 함께 웹페이지에서 유사한 여러 항목을 식별하는 데 사용됩니다. HTML 태그의 도움으로 WebElements를 찾는 데 사용됩니다.

 

사용방법 : driver.findElement (By.tagName (“HTML tag name”));

예 : List<WebElement> lists=driver.findElements(By.tagName(“a”))

 

Link Text: 링크 텍스트는 정확한 텍스트로 요소를 식별하는 데 사용됩니다.

 

사용방법 : driver.findElement(By.linkText (“linktext”))

예 : driver.findElement(By.linkText(“Today's Deals”))

 

 

PartialLinkText: 이 방법은 링크 텍스트의 일부가 포함된 요소를 찾는 데 도움이 됩니다. (linkText는 텍스트 전부, PartialLinkText는 일부라고 생각하시면 됩니다.)

 

사용방법: driver.findElement(By.partialLinkText (“partiallinktext”))

예 : driver.findElement(By. partialLinkText (“Service”))

 

Xpath: XPath는 XML 경로 언어를 나타내며, 페이지의 HTML 구조를 탐색하는 데 사용됩니다. 또한 HTML DOM 구조를 사용하여 웹 페이지에서 요소의 위치를 ​​찾기 위해 HTML 및 XML 문서 모두에 사용할 수 있습니다.

 

사용방법 : driver.findElement(By.xpath (<xpath>))

예: driver.findElement(By.xpath("//input[@id='twotabsearchtextbox']")

 

CSS Selector(CSS stands for Cascading Style Sheet): CSS 선택기는 요소 선택기와 웹 페이지 내에서 웹 요소를 식별하는 값의 조합입니다. HTML 태그, 속성, ID 및 클래스의 문자열 표현입니다.

사용방법 : driver.findElement(By.cssSelector(“css selector”))

예 : driver.findElement(By.cssSelector(“#twotabsearchtextboxl”))

 
 

 

참조:

 

다음 시간에는 위 Locators 중 많이 사용되는 것들로 예제를 만들어서 동작시켜보도록 해보겠습니다.

반응형
반응형

Locator 란?

 

웹 페이지 내에서 웹 요소를 고유하게 식별할 수 있는 주소라고 할 수 있습니다. Locator는 작업을 수행하는데 필요한 웹 요소에 대해 Selenium에 알려주는 웹 요소의 HTML 속성입니다. 

쉽게 설명하자면 이렇습니다.

 

온라인으로 물건을 구매한다고 가정을 하겠습니다. 열심히 온라인으로 구매할 물건을 검색하여 최저가의 물건을 찾았고, 배송지를 입력하고 결제를 합니다. 

 

내가 살 물건은 어떤 행위를 해야할 대상입니다. 해당 대상을 찾았으면 배송지가 어디인지를 입력해야 하는데 그 배송지는 Locator라고 볼 수 있습니다. 해당 Locator 를 찾으면 결제 즉, 행동입니다. 그 행동은 클릭이 될 수 있고 글을 입력할 수 있는 것 등이 될 수 있습니다.

 

그러면 Locator는 종류가 무엇이고 어떻게 찾을 수 있을까요?

 

Locator의 종류는 아래와 같습니다.

- ID

- ClassName

- Name

- LinkText

- Xpath

-CSS Selector

 

다양한 Locator 들 가운데 일반적으로 가장 많이 사용되는 경우는 Xpath와 CSS Selector 입니다. (그 외에도 많이 사용합니다.)

 

Locator 를 찾는 방법을 알려드리겠습니다.

 

- 웹 브라우저(chrome)를 열어 놓습니다. (ex. google)

- F12 를 눌러서 개발자도구를 엽니다.

    1. 웹 요소를 식별하기 위해 검사 아이콘을 클릭합니다.

    2. 검사할 대상(요소)을 클릭합니다.

    3. 요소를 기록해둡니다. (ex. CLASS, ID..)

 

이와 같은 방법을 통하여 요소를 찾을 수 있습니다. 다음 시간에는 Locator 들을 하나씩 사용하는 예시를 알려드리겠습니다.

반응형
반응형

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()

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

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

 

 

반응형
반응형

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

 

 

반응형

+ Recent posts