사실 자동화를 진행하면서 가장 기본적이고 꼭 필수적인 기능이 버튼을 클릭하는 것이라고 생각합니다.
다음 화면으로 넘어가거나, 원하는 값을 전달하기 위해서는 버튼이 클릭되어야 하는 경우가 많습니다.
근데 사실 버튼 클릭방법에는 여러가지 방법이 있습니다. 단순하게 사용했던 selenium 버튼 클릭 방법에서부터 왜인지 버튼이 클릭되지 않을때 사용할 수 있는 방법들에 대해 정리해보았습니다.
1. element.click();
가장 첫번째 방법이자 대표적인 방법으로 element를 선택해서 click 하는 방법입니다.
driver.get("https://www.selenium.dev/selenium/web/inputs.html");
// Click on the element
WebElement checkInput=driver.findElement(By.name("checkbox_input"));
checkInput.click();
별 문제가 없다면 대부분의 경우 이와 같은 방법을 사용해서 버튼을 클릭하고 있으리라 생각됩니다.
하지만, 때론 이렇게 해서 클릭되지 않는 케이스가 발생합니다. 분명 문구를 주었는데도 element를 클릭하지 못하는 경우가 있습니다. 이럴때 사용하는 방법은 바로 javascript를 이용하는 방법입니다
2. JavaScript를 이용한 버튼 클릭
// 버튼 요소 찾기
WebElement button = driver.findElement(By.id("id_of_button"));
// JavaScript를 사용하여 버튼 클릭
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", button);
이런 식으로 클릭을 해주면, 대부분의 경우 안되었던 클릭이 작동하는 방향으로 해결되긴 합니다.
혹시나 그래도 안되는 경우가 있다면 적절한 지연을 추가하여 타이밍을 조절하는 방법도 사용해 볼 수 있습니다.
element를 노출되기 전에 빠르게 넘어간 경우에도 버튼을 클릭할 수 없기 때문에, 적절한 지연을 주는 방법을 주는 방법도 해결책 중 하나가 될 수 있습니다.
3. wait문 사용 후 element 클릭
WebDriverWait wait = new WebDriverWait(driver, 10);
// 버튼 요소 찾기
WebElement button = driver.findElement(By.id("id_of_button"));
wait.until(ExpectedConditions.elementToBeClickable(button));
button.click();
위처럼 버튼이 클릭가능한 상태일때 클릭하는 조건을 추가해주거나 혹은 Thread.sleep(1000);문을 활용해서 아예 강제적으로 시간의 지연을 추가하는 방법을 이용할 수 있습니다.
Thread.sleep(1000); // 1초 지연
이 외에도 버튼처럼 영역을 클릭해서 값을 전달해야 하는 경우(ex: id, pw 입력 등)에는 다른 방법을 사용 할 수도 있습니다.
4. sendKeys 사용
// 로그인 정보 입력 및 로그인
WebElement username = driver.findElement(By.id("username"));
WebElement password = driver.findElement(By.id("password"));
username.sendKeys("your_username");
password.sendKeys("your_password");
sendKeys를 사용하면 한번에 원하는 값을 원하는 element영역에 넣어서 전달까지 할 수 있습니다.
5. Actions doubleclick
그 외에 selenium에서는 더블클릭을 지원하기도 합니다. 클릭으로 넘어가는 경우가 아니라면 마우스 더블클릭과 같은 액션을 사용할 수도 있습니다.
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
이외에도 selenium 에서는 마우스 액션인 click&hold, click&release, context click, back click등 다양한 것들을 지원하고 있습니다. 아래 사이트를 참고해서, 의도에 맞게 사용해주면 더 좋습니다.
참고 사이트 : https://www.selenium.dev/documentation/webdriver/actions_api/mouse/#double-click
'자동화(Automation)' 카테고리의 다른 글
Selenium_가상키보드 우회방법 (0) | 2024.06.22 |
---|---|
appium 자동화 Setting 2(Window환경) (0) | 2024.04.28 |
appium 자동화 Setting 1(Window 환경) (1) | 2024.03.31 |
Selenium_HttpUrlConnection (0) | 2022.09.16 |
Selenium_Window tab (0) | 2022.09.10 |
댓글