implicit explicit wait selenium webdriver
Selenium WebDriver에서 암시 적 및 명시 적 대기 알아보기 :
이전 튜토리얼에서 우리는 다양한 WebDriver의 반복 및 조건부 연산 . 이러한 조건부 메서드는 종종 웹 요소에 대한 거의 모든 유형의 가시성 옵션을 처리합니다.
앞으로 나아 가기 무료 Selenium 교육 시리즈 , 우리는 논의 할 것이다 Selenium WebDriver에서 제공하는 다양한 유형의 대기 . v에 대해서도 논의 할 것입니다. 다양한 유형의 탐색 옵션 WebDriver에서 사용할 수 있습니다.
대기는 전체 웹 페이지를 새로 고치고 새 페이지를 다시로드하여 다른 웹 페이지로 리디렉션하는 동안 사용자가 문제를 해결하는 데 도움을줍니다. 웹 요소. 때때로 Ajax 호출도있을 수 있습니다. 따라서 웹 페이지를 다시로드하고 웹 요소를 반영하는 동안 시간 지연이 발생할 수 있습니다.
사용자는 다양한 웹 페이지를 앞뒤로 탐색하는 경우가 많습니다. 따라서 WebDriver에서 제공하는 navigate () 명령 / 방법은 사용자가 웹 브라우저의 기록을 참조하여 웹 페이지를 탐색하여 실시간 시나리오를 시뮬레이션하는 데 도움이됩니다.
WebDriver는 반복되는 페이지로드를 처리하기 위해 사용자에게 두 가지 대기 시간을 제공합니다. s, 웹 요소로드, 창 모양, 팝업 및 오류 메시지, 웹 페이지의 웹 요소 반영.
- 암시 적 대기
- 명시 적 대기
실용적인 접근 방식을 고려하여 각각에 대해 자세히 논의하겠습니다.
학습 내용 :
WebDriver 암시 적 대기
암시 적 대기는 전체 테스트 스크립트에서 각 연속 테스트 단계 / 명령 사이에 기본 대기 시간 (예 : 30 초)을 제공하는 데 사용됩니다. 따라서 후속 테스트 단계는 이전 테스트 단계 / 명령을 실행 한 후 30 초가 경과 한 경우에만 실행됩니다.
주요 사항
- 암시 적 대기는 코드의 한 줄이며 테스트 스크립트의 설정 메서드에서 선언 할 수 있습니다.
- 명시 적 대기와 비교할 때 암시 적 대기는 투명하고 복잡하지 않습니다. 구문과 접근 방식은 명시 적 대기보다 간단합니다.
적용하기 쉽고 간단하기 때문에 암시 적 대기에는 몇 가지 단점도 있습니다. 각 명령이 실행을 재개하기 전에 규정 된 시간 동안 대기하지 않기 때문에 테스트 스크립트 실행 시간이 발생합니다.
따라서이 문제를 해결하기 위해 WebDriver는 각 테스트 단계를 실행하는 동안 강제로 대기하는 대신 상황이 발생할 때마다 명시 적으로 대기를 적용 할 수있는 명시 적 대기를 도입합니다.
수입 명세서
수입 java.util.concurrent.TimeUnit – 테스트 스크립트에서 암시 적 대기에 액세스하고 적용 할 수 있으려면이 패키지를 테스트 스크립트로 가져와야합니다.
통사론
drv .manage (). timeouts (). implicitlyWait (10, TimeUnit. SECONDS );
WebDriver 인스턴스 변수의 인스턴스화 직후 테스트 스크립트에 위의 코드 줄을 포함합니다. 따라서 이것이 테스트 스크립트에 암시 적 대기를 설정하는 데 필요한 전부입니다.
코드 연습
암시 적 대기는 매개 변수로 두 값을 전달하도록 요구합니다. 첫 번째 인수는 시스템이 기다려야하는 숫자의 시간을 나타냅니다. 두 번째 인수는 시간 측정 스케일을 나타냅니다. 따라서 위 코드에서는 기본 대기 시간으로 '30'초를 언급했으며 시간 단위는 '초'로 설정했습니다.
WebDriver 명시 적 대기
명시 적 대기는 특정 조건이 충족되거나 최대 시간이 경과 할 때까지 실행을 중지하는 데 사용됩니다. 암시 적 대기와 달리 명시 적 대기는 특정 인스턴스에만 적용됩니다.
WebDriver는 WebDriverWait 및 ExpectedConditions와 같은 클래스를 도입하여 테스트 스크립트에 명시 적 대기를 적용합니다. 이 토론에서는 'gmail.com'을 표본으로 사용합니다.
자동화 할 시나리오
- 웹 브라우저를 실행하고 'gmail.com'을 엽니 다.
- 유효한 사용자 이름을 입력하세요.
- 유효한 암호를 입력하십시오
- 로그인 버튼을 클릭하십시오
- 페이지로드 후 작성 버튼이 표시 될 때까지 기다립니다.
명시 적 대기를 사용하는 WebDriver 코드
스크립트 생성을 위해 이전 튜토리얼에서 생성 된“Learning_Selenium”프로젝트를 사용한다는 점에 유의하십시오.
1 단계 :“Learning_Selenium”프로젝트 아래에“Wait_Demonstration”이라는 새 Java 클래스를 만듭니다.
2 단계 :“Wait_Demonstration.java”클래스에 아래 코드를 복사하여 붙여 넣습니다.
아래는 위에서 언급 한 시나리오에 해당하는 테스트 스크립트입니다.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div[contains(text(),'COMPOSE')]'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div[contains(text(),'COMPOSE')]')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
수입 명세서
- 수입 org. openqa.selenium.support.ui.ExpectedConditions
- 수입 org. openqa.selenium.support.ui.WebDriverWait
- 스크립트를 생성하기 전에 위의 패키지를 가져옵니다. 패키지는 드롭 다운을 처리하는 데 필요한 Select 클래스를 참조합니다.
WebDriverWait 클래스에 대한 개체 인스턴스화
WebDriverWait 대기 = 새로운 WebDriverWait ( drv , 30);
WebDriverWait 클래스에 대한 참조 변수 'wait'를 만들고 WebDriver 인스턴스와 실행이 정리 될 때까지의 최대 대기 시간을 사용하여 인스턴스화합니다. 인용 된 최대 대기 시간은 '초'로 측정됩니다.
WebDriver 인스턴스화는 WebDriver의 초기 자습서에서 논의되었습니다.
예상 조건
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div[contains(text(),'COMPOSE')]'))); drv.findElement(By.xpath('//div[contains(text(),'COMPOSE')]')).click();
위의 명령은 규정 된 시간 또는 예상 조건 중 먼저 발생하거나 경과하는 시점을 기다립니다.
따라서이를 수행하기 위해 이전 단계에서 생성 한 WebDriverWait 클래스의 '대기'참조 변수를 ExpectedConditions 클래스와 함께 발생할 것으로 예상되는 실제 조건을 사용합니다. 따라서 예상 조건이 발생하자마자 프로그램 제어는 전체 30 초 동안 강제로 대기하는 대신 다음 실행 단계로 이동합니다.
샘플에서는 'compose'버튼이 나타나고 홈 페이지로드의 일부로로드 될 때까지 기다린 다음 'compose'버튼에 대한 클릭 명령을 호출합니다.
예상되는 조건의 유형
ExpectedConditions 클래스는 실제 테스트 단계를 실행하기 전에 조건이 발생하는지 확인해야하는 시나리오를 처리하는 데 큰 도움이됩니다.
ExpectedConditions 클래스는 WebDriverWait 참조 변수 및 until () 메서드를 사용하여 액세스 할 수있는 다양한 예상 조건과 함께 제공됩니다.
그중 몇 가지에 대해 자세히 설명하겠습니다.
# 1) elementToBeClickable () – 예상 조건은 요소를 클릭 할 수있을 때까지 기다립니다. 즉, 화면에 표시 / 표시 / 표시되고 활성화되어야합니다.
샘플 코드
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( “// div [contains (text (),’COMPOSE’)]” )));
# 2) textToBePresentInElement () – 예상 조건은 특정 문자열 패턴을 가진 요소를 기다립니다.
샘플 코드
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( “// div [@ id =‘forgotPass '”),“찾을 텍스트” ));
Windows 10에서 jar 파일을 어떻게 실행합니까?
# 3) alertIsPresent ()- 예상 조건은 경고 상자가 나타날 때까지 기다립니다.
샘플 코드
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () – 예상 조건은 특정 제목이있는 페이지를 기다립니다.
샘플 코드
wait.until (ExpectedConditions.titleIs ( 'gmail' ));
# 5) frameToBeAvailableAndSwitchToIt () – 예상 조건은 프레임을 사용할 수있을 때까지 기다린 다음 프레임을 사용할 수있게되면 제어 장치가 자동으로 프레임으로 전환됩니다.
샘플 코드
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ newframe ')));
사용자가 브라우저 기록에서 현재 세션에서 방문한 다른 웹 페이지로 이동하기 위해 웹 브라우저의 뒤로 및 앞으로 버튼을 앞뒤로 클릭하는 매우 일반적인 사용자 작업이 있습니다. 따라서 사용자가 수행하는 이러한 작업을 시뮬레이션하기 위해 WebDriver는 Navigate 명령을 도입합니다.
이러한 명령을 자세히 살펴 보겠습니다.
# 1) navigate (). back ()
이 명령을 사용하면 사용자가 이전 웹 페이지로 이동할 수 있습니다.
샘플 코드 :
driver.navigate (). back ();
위의 명령은 매개 변수가 필요하지 않으며 사용자를 웹 브라우저 기록의 이전 웹 페이지로 되돌립니다.
# 2) navigate (). forward ()
이 명령을 사용하면 사용자가 브라우저 기록을 참조하여 다음 웹 페이지로 이동할 수 있습니다.
샘플 코드 :
driver.navigate (). forward ();
위의 명령은 매개 변수가 필요하지 않으며 웹 브라우저 기록의 다음 웹 페이지로 사용자를 안내합니다.
# 3) navigate (). refresh ()
이 명령을 사용하면 사용자가 현재 웹 페이지를 새로 고쳐 모든 웹 요소를 다시로드 할 수 있습니다.
샘플 코드 :
driver.navigate (). refresh ();
위의 명령은 매개 변수가 필요하지 않으며 웹 페이지를 다시로드합니다.
# 4) navigate (). to ()
이 명령을 사용하면 사용자가 새 웹 브라우저 창을 시작하고 지정된 URL로 이동할 수 있습니다.
샘플 코드 :
driver.navigate (). to (“http://google.com”);
위의 명령은 매개 변수로 웹 URL이 필요하며 새로 실행 된 웹 브라우저에서 지정된 URL을 엽니 다.
결론
이것에 Selenium WebDriver 튜토리얼의 암시 적 및 명시 적 대기 , WebDriver의 기다림을 알려 드리려고 노력했습니다. 우리는 명시 적 대기와 암시 적 대기를 모두 논의하고 실행했습니다. 동시에 다양한 탐색 명령에 대해서도 논의했습니다.
이 기사의 핵심은 다음과 같습니다.
- WebDriver를 사용하면 웹 요소를로드하거나 특정 조건을 충족하기 위해 실행 흐름에 몇 초 동안 절전이 필요할 수있는 상황을 처리하기 위해 사용 가능한 대기 중에서 선택할 수 있습니다. WebDriver에는 두 가지 유형의 대기가 있습니다.
- 암시 적 대기
- 명시 적 대기
- 암시 적 대기 전체 테스트 스크립트에서 각 연속 테스트 단계 / 명령 사이의 기본 대기 시간을 제공하는 데 사용됩니다. 따라서 후속 테스트 단계는 이전 테스트 단계 / 명령을 실행 한 후 지정된 시간이 경과 한 경우에만 실행됩니다.
- 명시 적 대기 특정 조건이 충족되거나 최대 시간이 경과 할 때까지 실행을 중지하는 데 사용됩니다. 암시 적 대기와 달리 명시 적 대기는 특정 인스턴스에만 적용됩니다.
- WebDriver는 WebDriverWait 및 ExpectedConditions와 같은 클래스를 도입하여 명시 적 대기를 적용합니다.
- 예상 조건 클래스는 실제 테스트 단계를 실행하기 전에 조건이 발생하는지 확인해야하는 시나리오를 처리하는 데 큰 도움이됩니다.
- ExpectedConditions 클래스는 WebDriverWait 참조 변수 및 until () 메서드를 사용하여 액세스 할 수있는 다양한 예상 조건과 함께 제공됩니다.
- Navigate () 메서드 / commands는 다양한 웹 페이지를 앞뒤로 탐색하는 동안 사용자 동작을 시뮬레이션하는 데 사용됩니다.
다음 튜토리얼 # 16 : 목록의 다음 자습서에서는 사용자가 웹 사이트에 액세스하는 동안 나타날 수있는 다양한 유형의 경고와 WebDriver의 처리 방식에 익숙해 지도록 할 것입니다. 우리가 집중할 경고 유형은 주로 창 기반 경고 팝업과 웹 기반 경고 팝업입니다. 창 기반 팝업 처리는 WebDriver의 기능을 넘어선다는 것을 알고 있으므로 창 팝업을 처리하기 위해 일부 타사 유틸리티도 사용합니다.
독자를위한 참고 사항 : 그때까지 독자는 다양한 예상 조건과 탐색 명령을 사용하여 다양한 페이지로드 및 동적 요소가 화면에 팝업되는 시나리오를 자동화 할 수 있습니다.
추천 도서
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- 첫 번째 WebDriver 스크립트 구현 – Selenium WebDriver Tutorial # 10
- 셀레늄 FAQ
- Selenium WebDriver에서 경고 / 팝업을 처리하는 방법-Selenium Tutorial # 16
- Selenium WebDriver에서 익스텐트 보고서 생성 가이드
- 다양한 인기 브라우저에서 Selenium WebDriver를 실행하는 방법
- Eclipse로 WebDriver 전체 설정 및 설치 – Selenium Tutorial # 9