0에서 1까지의 4000단어 기사는 WebDriver+Selenium을 사용하여 브라우저 자동화를 실현합니다.

머리말

Selenium은 브라우저의 동작을 자동화할 수 있는 오픈 소스 프로젝트로, 원래 목적은 브라우저 기능의 테스트를 자동화하는 것이지만, 프로젝트가 개발되면서 사람들은 그것을 특성에 따라 좀 더 재미있는 기능을 하기 위해 사용하기도 합니다. UI용 자동화 테스트 도구입니다. 공식 Selenium 웹 사이트에 설명된 대로 Selenium은 브라우저 조작을 자동화할 수 있습니다. 끝났어! 그 능력으로 무엇을 하고 싶은지는 전적으로 당신에게 달려 있습니다.

사용되는 장면

브라우저의 자동 테스트에는 세 가지 시나리오가 있습니다.

  • Selenium WebDriver: 강력한 브라우저 기반 회귀 자동화 제품군 및 테스트를 만들고 여러 환경에서 스크립트를 확장 및 배포하려면 브라우저를 구동하기 위한 언어별 바인딩 세트인 Selenium WebDriver를 사용해야 합니다. 이것이 의미하는 바입니다. 운전하다
  • Selenium IDE: 빠른 버그 복제 스크립트를 생성하려면 탐색 테스트를 자동화하는 데 도움이 되는 스크립트를 생성한 다음 간단한 로깅 및 재생을 허용하는 Chrome, Firefox 및 Edge 플러그인인 Selenium IDE를 사용하는 것이 좋습니다.
  • Selenium Grid: 다수의 브라우저/OS 조합에 대해 쉽게 테스트를 실행할 수 있도록 여러 컴퓨터에서 테스트를 배포하고 실행하여 중앙 지점에서 여러 환경을 확장하고 관리하려면 Selenium Grid를 사용해야 합니다.

원칙

초기 Selenium의 목적은 웹 애플리케이션의 UI 자동화 테스팅을 실현하는 것이었고, 구현 방법은 타사 서버를 통해 js를 주입하여 브라우저 동작을 제어하는 ​​목적을 달성하는 것이었습니다. 이는 두 부분으로 구성됩니다.

  • 클라이언트 측에서 제어 브라우저 로직을 작성하기 위한 라이브러리
  • 브라우저 시작 및 종료를 제어하는 ​​서버 구현

구조는 다음과 같다

이 아키텍처는 복잡하고 다음과 같은 많은 제한 사항이 있음이 입증되었습니다.

  • 복잡한 아키텍처
  • Selenium RC는 JavaScript 명령을 브라우저 지침으로 사용하기 때문에 테스트 스크립트를 실행하는 데 시간이 많이 걸립니다. 이로 인해 성능이 저하될 수 있습니다.
  • API는 그다지 객체지향적이지 않습니다.
  • 헤드리스 HTMLUnit 브라우저는 지원되지 않습니다(보이지 않는 브라우저).

Selenium RC의 한계로 인해 새로운 자동화 프레임워크인 Selenium WebDriver가 개발되었습니다. 2006년 WebDriver가 도입된 후 RC의 복잡한 문제를 해결하고 해결할 수 있습니다.WebDriver와 결합된 Selenium은 브라우저의 제어 동작을 단순화하고 중간 링크에서 서버를 제거하며 시스템 수준에서 로컬로 브라우저를 직접 제어합니다. 최적화된 아키텍처는 다음과 같습니다.

환경 준비

코딩 레이어에서 기능을 구현하지 않으려면 녹화 재생 및 프로세스 스크립트 내보내기를 지원하는 Selenium IDE 플러그인을 다운로드할 수 있습니다.

코드를 통해 보다 유연한 사용자 정의 기능을 구현해야 하는 경우 Python을 사용하는 것이 좋으며 환경에 맞게 python3 및 pip3를 준비하십시오.

brew install python3

셀렌

pip3 install selenium

브라우저 드라이버 설치는 브라우저 자동화를 허용하도록 시스템을 설정합니다. WebDriver를 통해 Selenium은 Chrome/Chromium, Firefox, Internet Explorer, Edge, Opera 및 Safari와 같은 시장의 모든 주요 브라우저를 지원합니다. 가능한 경우 WebDriver는 브라우저의 내장 자동화 지원을 사용하여 브라우저를 구동합니다.

개발하다

첫 번째 스크립트

웹드라이버를 통한 브라우저 자동접근 기능 제어


def test_eight_components():
    driver = webdriver.Chrome()
    
    driver.get("https://google.com")
    
    title = driver.title
    assert title == "Google"
    
    driver.implicitly_wait(0.5)
    
    search_box = driver.find_element(by=By.NAME, value="q")
    search_button = driver.find_element(by=By.NAME, value="btnK")
    
    search_box.send_keys("Selenium")
    search_button.click()
    
    search_box = driver.find_element(by=By.NAME, value="q")
    value = search_box.get_attribute("value")
    assert value == "Selenium"
    
    driver.quit()

웹드라이버 API

브라우저 조작을 위한 webDriver의 API는 크게 열기, 닫기, 앞으로, 뒤로, 새로고침 등과 같은 브라우저 동작을 제어하는 ​​것과 클릭, 입력 및 요소 콘텐츠 가져오기 등과 같은 페이지 요소를 제어하는 ​​두 부분으로 나눌 수 있습니다.

브라우저

브라우저 정보 얻기

// title
driver.getTitle(); 
// url
driver.getCurrentUrl();

항해

//打开
driver.get("https://selenium.dev");

//跳转
driver.navigate().to("https://selenium.dev");

// 后退
driver.navigate().back();

// 前进
driver.navigate().forward();

// 刷新
driver.navigate().refresh();

총알 상자

//根据条件找到页面中的弹框并点击
driver.findElement(By.linkText("See an example alert")).click();

//等待弹框展示并保存到变量中
Alert alert = wait.until(ExpectedConditions.alertIsPresent());

//获得弹框内容文本
String text = alert.getText();

//点击确定按钮
alert.accept();
  

쿠키 와 유사한 경고, 확인, 프롬프트 기능은 쿠키의 추가 및 삭제를 지원할 수 있습니다.

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

public class addCookie {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        try {
            driver.get("http://www.example.com");

            // Adds the cookie into current browser context
            driver.manage().addCookie(new Cookie("key", "value"));
        } finally {
            driver.quit();
        }
    }
}

프레임은 프레임의 요소 획득 및 작동을 지원합니다. Windows WebDriver는 창과 탭을 구분하지 않습니다. 사이트에서 새 탭이나 창이 열리면 Selenium에서 창 핸들을 사용하여 처리할 수 있습니다. 각 창에는 단일 세션 내에서 일정하게 유지되는 고유 식별자가 있습니다. 다음을 사용하여 현재 창의 창 핸들을 얻을 수 있습니다.

driver.getWindowHandle();

요소

DOM에서 요소 식별 및 사용 대부분의 Selenium 코드는 웹 요소 작업과 관련됩니다. 함수의 이 부분은 프론트 엔드 코드를 작성하는 document.getElementById와 유사합니다.아이디어는 비교적 간단합니다.페이지에서 요소를 찾은 다음 사용자 행동을 시뮬레이션하는 작업을 수행합니다.절대 위치 지정을 지원하고 상대적인 포지셔닝 전략.복잡한 페이지 ID, 태그, 클래스에는 좋지 않음 포지셔닝에 xPath 방법을 사용할 수 있으며 이는 매우 유연합니다.실제로 암기할 필요가 없습니다.특정 요소가 찾기가 쉽지 않은 경우 공식 웹 사이트로 이동하여 API를 확인하여 달성할 수 있습니다.

상대 위치


def relative():
    # Above
    email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
    # Below
    password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
    # Left of
    cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"})
    # Right of
    submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"})
    # Near
    email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
    # Chaining relative locators
    submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_right_of({By.ID: "cancel"})

전통적인 포지셔닝

<ol id="vegetables" style="margin-top: 20px">
      <li class="potatoes">potatoes</li>
      <li class="onions">onions</li>
      <li class="tomatoes"><span>Tomato is a Vegetable</span></li>
    </ol>
    <ul id="fruits">
      <li class="bananas"></li>
      <li class="apples"></li>
      <li class="tomatoes"><span>Tomato is a Fruit</span></li>
     </ul>

def finders():
    # Evaluating entire DOM
    vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
    print(vegetable)
    # Evaluating a subset of the DOM
    fruits = driver.find_element(By.ID, "fruits")
    fruit = fruits.find_elements(By.CLASS_NAME, "tomatoes")
    print(fruit)
    # Optimized locator
    fruit = driver.find_element(By.CSS_SELECTOR, "#fruits .tomatoes")
    fruit2 = driver.find_element(By.CSS_SELECTOR, "ul .tomatoes")
    print(fruit == fruit2) # True
    # All matching elements
    plants = driver.find_elements(By.TAG_NAME, "li")
    print(plants)
    # Get all the elements available with tag name 'p'
    elements = driver.find_elements(By.TAG_NAME, 'span')
    for e in elements:
        print(e.text)


def xPath():
    ol = driver.find_element(By.XPATH, "/html/body/div/div/ol[1]")
    ol2 = driver.find_element(By.XPATH, "//ol[1]")
    ol3 = driver.find_element(By.XPATH, "//ol[@id='vegetables']")
    print(ol == ol2) # True
    print(ol == ol3) # True
    onions = driver.find_element(By.XPATH, "//ol[1]/li[2]")
    print(onions.text)

5가지 기본 명령 과 상호 작용 :

  • 클릭 (모든 요소)
  • 키 보내기(텍스트 블록 및 콘텐츠 편집 가능 요소에만 해당)
  • 클리어 (위와 동일)
  • 제출(양식 요소)
  • 선택(목록 요소 선택)

요소 정보 얻기

요약하다

이 공유는 Selenium 사용 시나리오, 간단한 원칙 및 몇 가지 기본 사용법을 소개합니다. 그리고 작은 예를 들었습니다. 위 콘텐츠를 마스터한 후에는 기본 UI 자동화 테스트를 이미 구현할 수 있습니다. 또한 일부 크롤러를 수행하고 브라우저 조작을 자동화할 수 있는 도구에 대한 요구 사항은 개별 시나리오에 따라 사용자 지정되어야 합니다. "게으른" 성격이 있는 한 이를 사용하는 흥미로운 시나리오를 많이 찾을 수 있을 것이라고 믿습니다.

마지막으로:  열렬한 팬들에게 보답하기 위해 완전한 소프트웨어 테스트 비디오 학습 자습서를 편집했습니다. 필요하면 무료로 얻을 수 있습니다. 【保证100%免费】

소프트웨어 테스트 인터뷰 애플릿

소프트웨어 테스트 문제 은행은 수백만 명의 사람들이 최대로 채웠습니다! ! ! 누가 알겠어! ! ! 전체 네트워크에서 가장 포괄적인 퀴즈 미니 프로그램으로, 지하철이나 버스에서 휴대폰을 사용하여 퀴즈를 풀 수 있습니다.

다음 인터뷰 질문 섹션이 다룹니다.

1. 소프트웨어 테스팅의 기초이론, 2. 웹, 앱, 인터페이스 기능 테스팅, 3. 네트워크, 4. 데이터베이스, 5. 리눅스

6. 웹, 앱, 인터페이스 자동화, 7. 성능 테스트, 8. 프로그래밍 기본 사항, 9. 시간 인터뷰 질문, 10. 공개 테스트 질문, 11. 보안 테스트, 12. 컴퓨터 기본 사항

전체 정보를 얻는 방법:

추천

출처blog.csdn.net/myh919/article/details/131404351