다음을 사용하여 페이지 새로 고침 Selenium 웹드라이버
⚡ 스마트 요약
페이지를 새로 고침 Selenium WebDriver가 현재 상태를 다시 로드합니다. URL 모든 요소가 어설션이 실행되기 전에 렌더링되도록 하기 위해 프레임워크는 서로 다른 방식으로 동일한 재로딩을 수행하는 다섯 가지 명령을 제공합니다.
웹 기반 애플리케이션의 테스트 자동화 과정에서 모든 웹 요소가 완전히 로드되도록 페이지를 여러 번 새로 고쳐야 할 필요가 생깁니다. 처음 페이지를 로드할 때는 일부 웹 요소만 로드될 수 있지만, 모든 요소가 표시되려면 두 번째 페이지 새로 고침이 필요합니다. 이는 `refresh` 명령어를 사용하여 수행할 수 있습니다. Selenium 웹드라이버.
페이지를 새로 고치는 방법 Selenium
브라우저 새로 고침 작업은 다음 방법을 사용하여 수행할 수 있습니다. Selenium. 기사 전반에 걸쳐 아래에 언급된 방법에 대해 자세히 논의할 것입니다.
- driver.navigate().refresh() 명령
- 메서드 가져오기
- 키 보내기 명령
- 탐색 방법
- driver.navigate().to() 명령
1) driver.navigate().refresh() 명령
이는 페이지 새로고침 작업을 수행하기 위해 제공되는 내장 메서드입니다. Selenium WebDriver. 이 명령어는 테스트 자동화에서 페이지 새로 고침 작업을 수행하는 데 가장 일반적으로 사용되는 명령어입니다. 새로 고침 명령어는 아래와 같이 간단하게 사용할 수 있습니다.
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();
Navigation 인터페이스는 이전 페이지로 이동, 다음 페이지로 이동, 페이지 새로 고침, 브라우저 닫기 등 다양한 브라우저 작업을 수행하는 데 사용됩니다. Navigation 인터페이스의 메서드는 `driver.navigate()` 명령어를 사용하여 접근할 수 있습니다. Navigation 인터페이스의 refresh 메서드는 인수를 받지 않으며 값을 반환하지 않습니다.
예:
테스트 시나리오 :
- 웹페이지가 있는 크롬 브라우저를 엽니다. https://demo.guru99.com/selenium/guru99home/
- 페이지가 성공적으로 로드되면 driver.navigate().refresh() 메서드를 사용하여 웹 페이지를 새로 고침하십시오.
- driver.close() 메서드를 사용하여 브라우저를 닫으세요.
Code
package Guru99Demo; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RefreshDemo { public static void main(String args[]) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/selenium/guru99home/"); driver.manage().window().maximize(); driver.navigate().refresh(); driver.close(); } }
⚠️ 버전 참고: Selenium 관리자는 다음 구성품과 함께 배송됩니다. Selenium 4.6 또한 해당 브라우저 드라이버를 자동으로 다운로드하므로 최신 버전에서는 위의 System.setProperty 줄이 더 이상 필요하지 않습니다. new ChromeDriver() 그것으로 충분합니다. 원래 문장은 여전히 올바르기 때문에 그대로 유지됩니다. Selenium 3가지 스타일 설정 방식을 예시로 사용했습니다.
Code 출력:
페이지를 처음 로드하면 데모 홈페이지가 아래와 같이 표시됩니다.
페이지 새로고침 후 페이지의 영상이 변경된 것을 보니 새로고침이 실제로 발생한 것이 확인되었습니다.
페이지를 새로 고치는 다른 여러 가지 방법
페이지를 새로고침하는 방법은 '새로 고침' 방식만이 아닙니다. 아래 네 가지 방법 모두 동일한 결과를 제공하며, 보안이 강화된 애플리케이션이나 까다로운 브라우저가 이러한 방법 중 하나를 차단하는 경우가 있으므로 알아두면 유용합니다.
2) 메서드 가져오기
`get` 메서드는 페이지를 새로 고치기 위해 재귀적으로 사용할 수 있습니다. 이를 위해서는 `get` 메서드에 다른 메서드를 인수로 전달해야 합니다.
예:
driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());
3) 탐색 방법
이 방법은 위에서 언급한 것과 동일한 재귀 개념을 사용합니다. getCurrentUrl() 메서드는 driver.navigate().to() 메서드의 인수로 전달됩니다.
예:
driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());
4) F5 키를 이용한 키 전송 방식
이는 페이지를 새로 고치는 데 두 번째로 가장 일반적으로 사용되는 방법입니다. SeleniumsendKeys 메서드는 새로 고침 키(F5)를 인수로 받습니다. sendKeys 메서드는 브라우저가 아닌 웹 요소에만 적용되므로, 먼저 웹 페이지에서 유효한 웹 요소를 찾은 다음 sendKeys 메서드를 사용해야 합니다. 이는 아래와 같이 수행할 수 있습니다.
예:
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys(Keys.F5);
키 입력이 브라우저 크롬이 아닌 요소로 전달되기 때문에 이 경로는 포커스를 유지하고 있는 요소에 따라 달라집니다. 만약 포커스가 있는 요소라면... 토지 경계 설정자 포커스를 받을 수 없는 필드와 일치하면 키가 무시되고 페이지가 다시 로드되지 않습니다.
5) ASCII를 사용한 키 전송 방식 Code
이 방법은 위와 동일한 개념을 사용하지만, F5 키를 인수로 전달하는 대신 새로 고침 키의 코드 포인트를 인수로 전달합니다. 이는 아래와 같이 구현할 수 있습니다.
driver.get("https://www.guru99.com"); driver.findElement(By.id("username")).sendKeys("\uE035");
값 \uE035는 프로토콜이 F5에 매핑하는 WebDriver 유니코드 코드 포인트이므로 이 코드 조각과 이전 코드 조각은 동일합니다.
페이지를 새로고침하는 방법 Java스크립트 실행기
모든 브라우저는 페이지 스크립트에 새로고침 기능을 제공합니다. Selenium 전화를 걸 수 있습니다. Javascript실행기 인터페이스입니다. 이는 웹드라이버 새로 고침 명령이 애플리케이션이나 브라우저 확장 프로그램에 의해 가로채졌을 때 일반적으로 사용되는 대체 인터페이스입니다.
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");
두 가지 변형 사항을 기억해 두는 것이 좋습니다.
- 위치 새로 고침() 정상적으로 페이지를 새로고침하고 캐시에서 페이지를 제공할 수도 있습니다.
- history.go(0) 이는 일부 기존 소프트웨어 제품군에서 여전히 사용되는 구식 기능입니다.
실행기 경로는 페이지 내부에서 실행되므로 자체적으로 새 문서를 기다리지 않습니다. driver.navigate().refresh() 호출 후와 마찬가지로 명시적인 대기 조건을 추가해야 하며, 스크립트 기반 새로 고침은 브라우저 수준의 대화 상자를 지우지 않는다는 점을 기억해야 합니다. 테스트 대상 애플리케이션이 콘텐츠를 비동기적으로 로드하는 경우에도 동일한 주의 사항이 적용됩니다. AJAX 호출 처리 Selenium 웹드라이버.
페이지 새로 고침 후 StaleElementReferenceException 오류를 방지하는 방법
페이지 새로고침은 현재 DOM을 삭제하고 새로운 DOM을 생성합니다. 새로고침 전에 캡처된 모든 WebElement는 더 이상 존재하지 않는 노드를 가리키게 되므로, 다음에 해당 WebElement를 호출할 때 StaleElementReferenceException 예외가 발생합니다. 이는 페이지 새로고침 후 발생하는 가장 흔한 오류입니다.
세 가지 습관만 있으면 이러한 실패들을 거의 모두 없앨 수 있습니다.
- 나중에 찾아야지, 그 전에 찾으면 안 돼. WebElement 대신 By 로케이터를 저장하고, 페이지 새로 고침이 완료되면 findElement를 다시 호출합니다.
- 진짜 신호를 기다리세요. 페이지를 새로고침한 후에만 존재하는 요소의 가시성을 명시적으로 기다리는 방식이 고정된 대기 시간보다 훨씬 더 안정적입니다.
- 페이지를 새로고침한 후 다시 읽어보세요. 재로드 전에 캡처한 텍스트 값이나 속성을 재로드 후에 수행되는 어설션에 절대 포함시키지 마십시오.
아래 패턴은 세 가지 모두에 적용됩니다.
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.navigate().refresh(); WebElement search = wait.until( ExpectedConditions.visibilityOfElementLocated(By.id("username"))); search.sendKeys("guru99");
WebDriverWait는 Duration 값을 인수로 받습니다. Selenium 4는 이전에 사용되었던 정수-초 생성자와의 변경 사항입니다. Selenium 3. 이러한 실패에 대한 보다 광범위한 해결 기법은 저희 가이드에서 다루고 있습니다. 예외 처리 Selenium.
비교 Selenium 페이지 새로고침 방법
이 여섯 가지 명령 모두 페이지를 새로 고치지만, 의존 조건과 실패 방식이 서로 다릅니다.
| 방법 | 에 따라 | 리로드를 통해 | 그것이 올바른 선택일 때 |
|---|---|---|---|
| 드라이버.navigate().refresh() | 추가 사항 없음 | 브라우저 새로 고침 명령 | 거의 항상 — 기본값 |
| 드라이버.get(드라이버.getCurrentUrl()) | 읽기 쉬운 전류 URL | 새로운 내비게이션 | 기록 항목도 삭제하고 싶을 때 |
| driver.navigate().to(driver.getCurrentUrl()) | 읽기 쉬운 전류 URL | 새로운 내비게이션 | 위와 동일하게 내비게이션 인터페이스를 통해 작성되었습니다. |
| sendKeys(Keys.F5) | 초점 맞추기 가능한 요소 | 키 입력 | 키보드 경로를 의도적으로 테스트할 때 |
| sendKeys(“\uE035”) | 초점 맞추기 가능한 요소 | 키 입력 | F5와 동일하며 코드 포인트로 작성됩니다. |
| Javascript실행기 위치.reload() | 스크립팅 활성화됨 | 페이지 스크립트 | WebDriver 명령이 차단될 때 |
먼저 새로 고침 명령을 시도하고, 그 명령이 실패할 만한 이유를 이해할 수 있을 때만 다른 행을 살펴보세요. 다음과 같은 경우에도 동일한 우선순위가 적용됩니다. 브라우저 창을 최대화하거나 크기를 조정하세요.네이티브 WebDriver 호출을 우선적으로 사용하고 스크립트 경로는 대체 경로로 처리합니다.


