다음을 사용하여 페이지 새로 고침 Selenium 웹드라이버

⚡ 스마트 요약

페이지를 새로 고침 Selenium WebDriver가 현재 상태를 다시 로드합니다. URL 모든 요소가 어설션이 실행되기 전에 렌더링되도록 하기 위해 프레임워크는 서로 다른 방식으로 동일한 재로딩을 수행하는 다섯 가지 명령을 제공합니다.

  • 🔘 기본 선택: driver.navigate().refresh()는 내장된 새로 고침 메서드이며 인수를 받지 않고 값을 반환하지 않습니다.
  • ☑️ 재귀적 변형: getCurrentUrl()을 get() 또는 navigate().to()에 전달하면 동일한 주소가 다시 로드됩니다.
  • 키보드 경로: sendKeys는 Keys.F5 또는 유니코드 값 \uE035를 허용하지만, 실제 요소를 대상으로 해야 합니다.
  • 🧪 스크립트 경로: JavascriptWebDriver 명령이 차단된 경우에도 location.reload()를 실행하는 Executor는 정상적으로 작동합니다.
  • 🛠️ 재장전 후: 이전에 캡처한 모든 요소 참조는 더 이상 유효하지 않으므로 다시 찾아야 합니다.
  • 📊 최신 설정: Selenium 관리자 기능이 버전 4.6에 추가되었으므로 더 이상 드라이버 경로를 수동으로 설정할 필요가 없습니다.

페이지를 새로고침하려면 다음을 사용하세요. Selenium WebDriver 명령

웹 기반 애플리케이션의 테스트 자동화 과정에서 모든 웹 요소가 완전히 로드되도록 페이지를 여러 번 새로 고쳐야 할 필요가 생깁니다. 처음 페이지를 로드할 때는 일부 웹 요소만 로드될 수 있지만, 모든 요소가 표시되려면 두 번째 페이지 새로 고침이 필요합니다. 이는 `refresh` 명령어를 사용하여 수행할 수 있습니다. Selenium 웹드라이버.

페이지를 새로 고치는 방법 Selenium

브라우저 새로 고침 작업은 다음 방법을 사용하여 수행할 수 있습니다. Selenium. 기사 전반에 걸쳐 아래에 언급된 방법에 대해 자세히 논의할 것입니다.

  1. driver.navigate().refresh() 명령
  2. 메서드 가져오기
  3. 키 보내기 명령
  4. 탐색 방법
  5. 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 메서드는 인수를 받지 않으며 값을 반환하지 않습니다.

예:

테스트 시나리오 :

  1. 웹페이지가 있는 크롬 브라우저를 엽니다. https://demo.guru99.com/selenium/guru99home/
  2. 페이지가 성공적으로 로드되면 driver.navigate().refresh() 메서드를 사용하여 웹 페이지를 새로 고침하십시오.
  3. 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 출력:

페이지를 처음 로드하면 데모 홈페이지가 아래와 같이 표시됩니다.

Guru새로 고침 명령이 실행되기 전 초기 로드 시 99 데모 홈페이지가 표시됩니다.

페이지 새로고침 후 페이지의 영상이 변경된 것을 보니 새로고침이 실제로 발생한 것이 확인되었습니다.

Gurudriver.navigate().refresh() 후 99 데모 홈 페이지에 다른 비디오가 표시됩니다.

페이지를 새로 고치는 다른 여러 가지 방법

페이지를 새로고침하는 방법은 '새로 고침' 방식만이 아닙니다. 아래 네 가지 방법 모두 동일한 결과를 제공하며, 보안이 강화된 애플리케이션이나 까다로운 브라우저가 이러한 방법 중 하나를 차단하는 경우가 있으므로 알아두면 유용합니다.

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

두 가지 변형 사항을 기억해 두는 것이 좋습니다.

  1. 위치 새로 고침() 정상적으로 페이지를 새로고침하고 캐시에서 페이지를 제공할 수도 있습니다.
  2. history.go(0) 이는 일부 기존 소프트웨어 제품군에서 여전히 사용되는 구식 기능입니다.

실행기 경로는 페이지 내부에서 실행되므로 자체적으로 새 문서를 기다리지 않습니다. driver.navigate().refresh() 호출 후와 마찬가지로 명시적인 대기 조건을 추가해야 하며, 스크립트 기반 새로 고침은 브라우저 수준의 대화 상자를 지우지 않는다는 점을 기억해야 합니다. 테스트 대상 애플리케이션이 콘텐츠를 비동기적으로 로드하는 경우에도 동일한 주의 사항이 적용됩니다. AJAX 호출 처리 Selenium 웹드라이버.

페이지 새로 고침 후 StaleElementReferenceException 오류를 방지하는 방법

페이지 새로고침은 현재 DOM을 삭제하고 새로운 DOM을 생성합니다. 새로고침 전에 캡처된 모든 WebElement는 더 이상 존재하지 않는 노드를 가리키게 되므로, 다음에 해당 WebElement를 호출할 때 StaleElementReferenceException 예외가 발생합니다. 이는 페이지 새로고침 후 발생하는 가장 흔한 오류입니다.

세 가지 습관만 있으면 이러한 실패들을 거의 모두 없앨 수 있습니다.

  1. 나중에 찾아야지, 그 전에 찾으면 안 돼. WebElement 대신 By 로케이터를 저장하고, 페이지 새로 고침이 완료되면 findElement를 다시 호출합니다.
  2. 진짜 신호를 기다리세요. 페이지를 새로고침한 후에만 존재하는 요소의 가시성을 명시적으로 기다리는 방식이 고정된 대기 시간보다 훨씬 더 안정적입니다.
  3. 페이지를 새로고침한 후 다시 읽어보세요. 재로드 전에 캡처한 텍스트 값이나 속성을 재로드 후에 수행되는 어설션에 절대 포함시키지 마십시오.

아래 패턴은 세 가지 모두에 적용됩니다.

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 호출을 우선적으로 사용하고 스크립트 경로는 대체 경로로 처리합니다.

자주 묻는 질문

가능합니다. 현재 페이지가 POST 요청으로 생성된 경우, 브라우저가 데이터 재전송을 요청할 수 있으며, 이 과정에서 페이지 새로고침이 해당 대화 상자 뒤에서 지연될 수 있습니다. 다른 페이지로 이동하려면... URL get()을 다시 사용하면 프롬프트가 완전히 사라집니다.

바인딩 이름은 다르지만 명령은 동일합니다: driver.refresh() PythonC#의 driver.Navigate().Refresh()와 driver.navigate().refresh() Java세 가지 모두 동일한 WebDriver 명령어를 실행합니다.

아니요. 새로 고침을 해도 동일한 출처의 쿠키, 세션 저장소 및 로컬 저장소는 유지되므로 새로 고침은 상태를 초기화하는 좋은 방법이 아닙니다. 쿠키를 명시적으로 삭제하거나 새 브라우저 세션을 시작하세요.

자체 복구 엔진은 다시 로드된 DOM이 더 이상 일치하지 않을 때 여러 속성에서 로케이터를 다시 해결하고, 오류 분석 모델은 재로드 타이밍 오류를 그룹화하여 팀이 50개의 테스트 대신 하나의 대기 시간만 수정하도록 합니다.

네, 그리고 한 줄짜리 새로 고침 호출은 일관되게 잘 작동하는 제안입니다. 하지만 그 후에 발생하는 대기 시간 때문에 문제가 발생할 수 있으므로, 생성된 타임아웃이 애플리케이션의 실제 로딩 속도와 일치하는지 검토해 보세요.

별도의 명령은 없습니다. Teams는 Actions 클래스를 통해 Ctrl 키와 F5 키를 동시에 전송하거나 브라우저 옵션에서 캐시를 비활성화하는 방식으로 유사한 기능을 구현할 수 있는데, 후자가 더 안정적인 방법입니다.

최상위 문서를 항상 다시 로드하는 새로 고침 명령으로는 안 됩니다. 프레임으로 전환한 다음 스크립트를 사용하여 다시 로드하거나 소스 속성을 재설정한 후 기본 콘텐츠로 다시 전환하세요.

고정된 대기 시간으로 추측하지 마세요. 페이지 새로 고침 후에만 참이 되는 조건을 사용하여 10초에서 30초 사이의 명시적인 대기 시간을 설정하세요. 이렇게 하면 페이지가 준비되는 순간 테스트가 계속됩니다.

이 게시물을 요약하면 다음과 같습니다.