Selenium + java - 페이지 개체 디자인 모드
Page Object (페이지 대상) 모델 은 Selenium 실전 에서 가장 유행 하고 자동화 테스트 학생 들 에 게 익숙 하고 추앙 받 는 디자인 모델 중 하나 입 니 다.디자인 테스트 를 할 때 페이지 요소 의 포 지 셔 닝 과 요소 조작 방법 을 페이지 에 따라 추상 화하 여 일정한 대상 으로 분리 한 다음 에 조직 한다.
자동화 테스트 를 하 는 모든 학생 들 이 이런 골 치 아 픈 문 제 를 만 날 것 이 라 고 믿 습 니 다. 그것 은 바로 페이지 변화 입 니 다. 만약 에 Page Object 디자인 모델 을 사용 하지 않 았 다 면 예전 의 포 지 셔 닝 요소 방법 을 사용 할 수 없 었 고 요소 포 지 셔 닝 방식 을 다시 수정 해 야 한 다 는 것 을 의미 합 니 다.테스트 스 크 립 트 에서 수정 해 야 할 요소 포 지 셔 닝 방식 을 찾 아 수정 해 야 합 니 다.이것 은 반드시 스 크 립 트 유지 비용 을 높 일 것 이다. 분명히 이런 자동화 스 크 립 트 는 아무 도 사용 하고 싶 어 하지 않 을 것 이다.
그럼 이 때 우 리 는 page object 모드 를 사용 하면 이 문 제 를 해결 할 수 있 습 니 다.
PageObject 의 장점
코드 중복 감소
업무 와 분리 실현
코드 유지 보수 비용 을 낮추다.
페이지 개체 모드
Page Object 는 이름 을 알 수 있 는 것 이 바로 페이지 대상 이 고 페이지 요소 의 포 지 셔 닝 방법 과 요소 작업 을 분리 하 는 것 입 니 다.
실제 자동화 테스트 실전 과정 에서 우 리 는 보통 스 크 립 트 의 실현 에 대해 3 층 으로 나 뉜 다.
4. 567917. 대상 층: 페이지 요소 의 포 지 셔 닝 과 컨트롤 작업 을 저장 하 는 데 사 용 됩 니 다
4. 567917. 논리 층: 봉 인 된 기능 용례 모듈 이다
4. 567917. 업무 층: 우리 의 진정한 테스트 사례 의 조작 부분 이다
Page Object 클래스 를 사용 하여 페이지 요 소 를 분리 합 니 다.
우 리 는 360 영상 로그 인 페이지 를 테스트 대상 으로 먼저 패키지 com. pageobject. demo 를 만 듭 니 다.
대상 층
우선 로그 인 페이지 를 새로 만 듭 니 다. 로그 인 페이지 에서 조작 해 야 할 요소 포 지 셔 닝 방식 과 컨트롤 동작 을 작성 합 니 다. 구체 적 인 코드 예 시 는 다음 과 같 습 니 다.
package com.pageobject.demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
/**
* @author rongrong
*
*/
public class LoginPage {
WebDriver driver;
//
public static By userNameInput = By.name("loginname");
//
public static By passWordInput = By.name("loginpassword");
//
public static By loginBtn = By.linkText(" ");
//
public static By errorMsg = By.cssSelector("[class='b-signin-error js-b-signin-error error-2']");
public LoginPage(WebDriver driver) {
this.driver = driver;
}
/**
*
*
* @param userName
*/
public void sendKeysUserName(String userName) {
driver.findElement(userNameInput).clear();
driver.findElement(userNameInput).sendKeys(userName);
}
/**
*
*
* @param passWord
*/
public void sendKeysPassWord(String passWord) {
driver.findElement(passWordInput).clear();
driver.findElement(passWordInput).sendKeys(passWord);
}
}
여기 서 저 는 사용자 이름과 비밀번호 입력 상자 만 봉 인 했 습 니 다. 관심 이 있 는 학생 들 도 이어서 모든 요 소 를 봉 인 했 습 니 다.
조작 층
로그 인 논리 에 사용 할 로그 인 패키지 인 LoginMovies 를 새로 만 들 었 습 니 다. 업무 층 에서 호출 할 수 있 습 니 다. 구체 적 인 코드 예 는 다음 과 같 습 니 다.
package com.pageobject.demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
/**
* @author rongrong
*
*/
public class LoginMovies {
WebDriver driver;
public LoginMovies(WebDriver driver) {
this.driver = driver;
}
/**
*
*
* @param userName
* @param pwd
* @param expected
*/
public void login(String userName, String pwd, String expected) {
LoginPage loginPage = new LoginPage(driver);
//
loginPage.sendKeysUserName(userName);
//
loginPage.sendKeysPassWord(pwd);
//
driver.findElement(LoginPage.loginBtn).click();
//
String msg = driver.findElement(LoginPage.errorMsg).getText();
Assert.assertEquals(msg, expected);
}
}
실무 층
마지막 으로 저 희 는 TestPageObject 를 새로 만 들 었 습 니 다. 업무 층 의 패 키 징 에 사 용 됩 니 다. 구체 적 인 코드 예 는 다음 과 같 습 니 다.
package com.pageobject.demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
/**
* @author rongrong
*
*/
public class TestPageObject {
/**
* 360
*/
public static final String URL = "https://i.360kan.com/login";
WebDriver driver;
@BeforeClass
public void BeforeClass() {
// , chromedriver
System.setProperty("webdriver.chrome.driver", "tool/chromedriver.exe");
// ChromeDriver
driver = new ChromeDriver();
driver.get(URL);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
/**
*
*/
@Test
public void testLogin() {
//
LoginMovies loginMovies = new LoginMovies(driver);
loginMovies.login("your userName", "your passWord", " ");
}
@AfterClass
public void closedChrome() {
driver.quit();
}
}
작은 매듭
이 실현 방법 은 훨씬 복잡 해 보이 지만 디자인 의 장점 은 서로 다른 관심 사다.페이지 대상 은 요소 의 포 지 셔 닝 에 만 관심 을 가지 고 테스트 사례 는 테스트 데이터 에 만 관심 을 가진다.
LoginPage 클래스 에 서 는 로그 인 페이지 의 요 소 를 봉인 하여 구체 적 인 조작 방법 으로 만 듭 니 다.예 를 들 어 사용자 이름, 비밀번호 상 자 를 모두 방법 으로 밀봉 한 다음 login (String userName, String pwd, String expected) 방법 을 정의 하여 하나의 요소 작업 을 완전한 동작 으로 구성 합 니 다. 사용자 이름, 비밀 번 호 를 입력 하고 로그 인 단 추 를 누 르 는 등 을 포함 합 니 다.
사용 시 driver, username, pwd, expected 를 함수 의 인삼 으로 하 는 방법 은 매우 강 한 중용 성 을 가진다.
마지막 으로 testLogin () 방법 을 사용 하여 사용자 작업 을 진행 합 니 다. 현 재 는 어떤 브 라 우 저, 로그 인 한 사용자 이름과 비밀번호 가 무엇 인지 에 만 관심 을 가지 고 있 습 니 다. 적어도 입력 상자, 단 추 를 어떻게 찾 는 지 에 대해 서 는 관심 이 없습니다.서로 다른 관심 사 를 실현 한 것 이다.만약 에 포 지 셔 닝 요소 의 변화 가 있 으 면 LoginPage 와 같은 유지 보수 만 하면 되 고 많은 편리 함 이 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.