봄날은 갔다. 이제 그 정신으로 공부하자

Selenium UI 테스트 자동화 소소한 문제점 해결 본문

카테고리 없음

Selenium UI 테스트 자동화 소소한 문제점 해결

길재의 그 정신으로 공부하자 2025. 1. 20. 10:10

 

이 글은 Selenium UI 테스트 자동화 기능 구현 중 발견한 문제점들을 해결한 방법에 대해 기술한 글입니다.

대부분 Selenium IDE에서 export한 코드가 JAVA 프로젝트에서 정상적으로 작동하지만 몇몇 코드들은 JAVA 프로젝트 뿐만이 아니라 레코딩한 Selenium IDE에서도 PLAY가 되지 않는 경우가 있는데
아래 발견한 문제점들을 해결하는 방안에 대해 기술하였습니다.

 

  • 타이밍 이슈
  • 알림 팝업
  • 드롭다운 박스 (select)
  • 파일 셀렉트 박스


타이밍 이슈

테스트 자동화 기능을 구현하면서 가장 처음 맞닥드리고 가장 많이 보게 되는 문제가 타이밍 이슈 입니다.
네트워크 성능 저하 또는 기타 여러 이유로 평소해는 잘 수행되던 화면 전환이 느려 다음 Action을 수행할 element를 찾지 못해 해당 element가 없다는 에러가 발생합니다.

간단하게 sleep 함수를 사용해 적당한 시간동안 대기하는 방법이 있지만 이 방법의 경우, 전체적인 테스트 시간 증가와 대기 시간보다 시간이 더 걸리는 경우, 에러가 발생할 우려가 여전히 있습니다.
사용 방법은 아래와 같습니다.

try {
	Thread.sleep(ms);
} catch (InterruptedException e) {
	e.printStackTrace();
}


두번째 방법은 수행할 다음 element가 화면에 보여질때까지 기다리는 방법입니다.
이방법의 경우, 딱 정해진 시간만큼만 대기한다는 장점이 있지만 화면에 보여지도록 대기하는 element가 이전 화면에 존재하는 경우, 에러가 발생하므로 사용상 주의가 필요합니다.
사용 방법은 아래와 같습니다.

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20).getSeconds());

// class name이 보여질때까지 대기
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(className)));

// id가 보여질때까지 대기
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));

// name이 보여질때까지 대기
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name(name)));



이와는 반대로 아래와 같이 특정 element가 화면에서 사라질때까지 기다리는 방법도 있습니다.

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20).getSeconds());
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(className)));

 


알림 팝업

Selenium IDE에서 녹화한 내용 중 알림 팝업이 나타나 사용자 액션으로 “확인” 버튼을 눌러 사라지게 만드는 시나리오가 있는 경우, Selenium IDE에서도 PLAY가 제대로 되지 않습니다.
이부분을 Selenium IDE에서 수정한 후 export하는 것은 매우 번거로운 작업이므로 알림 팝업과 관련된 부분이 있으면 아래와 같이 java 코드에서 직접 수정해 줍니다.

// 수정 전
assertThat(driver.switchTo().alert().getText(), is("알림이 등록되었습니다."));

// 수정 후
driver.switchTo().alert().accept();


드롭다운 박스 (select)

셀렉트 팝업도 알림 팝업과 마찬가지로 Selenium IDE에서 분명히 ITEM을 선택했는데 PLAY해보면 선택되지 않는 문제가 발생하고는 합니다.
이때는 아래와 같이 수정이 필요합니다.

// 수정 전
driver.findElement(By.cssSelector("tr:nth-child(1) select")).click();
{
	WebElement dropdown = driver.findElement(By.cssSelector("tr:nth-child(1) select"));
	dropdown.findElement(By.xpath("//option[. = 'LG전자']")).click();
}

// 수정 후 [검색 불가능한 select box]
Select select = new Select(driver.findElement(By.cssSelector("tr:nth-child(1) select")));
select.selectByVisibleText("LG전자");

// 수정 후 [검색 가능한 select box]
driver.findElement(By.id("select2-select_group-container")).click();
driver.findElement(By.cssSelector(".select2-search__field")).sendKeys("LG전자");
driver.findElement(By.cssSelector(".select2-search__field")).sendKeys(Keys.ENTER);

 



파일 셀렉트 박스

Selenium IDE에서 녹화한 내용 중 파일을 추가하는 시나리오가 있다면 이 부분은  Selenium IDE에서도 정상적으로 PLAY가 되지 않습니다.
크롬 확장 프로그램의 Selenium IDE 세부 정보로 들어가서 아래 정보를 ON으로 변경합니다.


그 후 Selenium IDE에서 자동으로 만들어준 코드 중 파일 셀렉트 팝업을 띄워주는 부분을 제거하고 첨부된 파일 경로를 재지정해줍니다.
파일 셀렉트 팝업을 띄워주는 부분을 제거하는 이유는 파일 셀렉트 팝업에서 사용자가 입력하는 Action은 Selenium IDE가 입력 받지 못하는 문제가 있고
또한 테스트 시나리오에서 어떤 파일을 선택할지 이미 정해져 있기 때문에 굳이 파일 셀렉트 팝업을 띄워 줄 필요는 없기 때문입니다.

// 수정 전
driver.findElement(By.cssSelector("div:nth-child(1) > div > label > div")).click();
driver.findElement(By.id("input_file")).sendKeys("C:\\fakepath\\cat-8438334_1280.jpg");

// 수정 후
driver.findElement(By.id("input_file")).sendKeys("\users\devleekj\dopwnload\testcontents\cat-8438334_1280.jpg");

 

Comments