What difference executeScript click and checked using Selenium Java

Dahun Yoo·2021년 9월 1일
0
post-thumbnail

설명하고보니 당연한 차이이긴 하지만, Selenium에서 JavascriptExecuter.executeScript()를 사용할때, click과 checked=true의 차이를 작성해봅니다.


JavascriptExecutor

In simple words, JavascriptExecutor is an interface that is used to execute JavaScript with Selenium. To simplify the usage of JavascriptExecutor in Selenium, think of it as a medium that enables the WebDriver to interact with HTML elements within the browser. JavaScript is a programming language that interacts with HTML in a browser, and to use this function in Selenium, JavascriptExecutor is required.

https://www.browserstack.com/guide/javascriptexecutor-in-selenium

Selenium을 이용하여 브라우저를 조작할 때, 특정 상황에서는 직접 javascript 실행해야합니다.
이 때 execiteScript() 메소드에 실행하고자 하는 javascript 문을 String으로 전달하고, 그 다음 해당 javascript명령어로 조작하고자 하는 WebElement요소를 전달합니다.

보통 JavascriptExecutor는 driver로 조작할 수 없는 어떠한 Interact한 조작을 진행할 때 사용되기도 하며, 화면상에는 보이지 않는 객체를 조작할 때에도 사용됩니다.


RadioButton, Checkbox

자주 보이는 경우로는, 라디오버튼과 체크박스를 조작할 때입니다.
<input type="radio"/> <input type="checkbox"/> 보통 이런 요소를 핸들링할 때 사용하는데, 화면에는 보이지만 왠지 모르게 WebElement.click() 으로는 동작하지 않는 경우가 많습니다.

google에 검색해보면, 대부분의 경우 xpath로 지정할 시 제대로 된 지정자가 아니라서 실패한다는 내용들이 많습니다. cssSelector나 id를 통해서 지정해야한다는 글이 많은데, 신기하게도 그렇게 해도 클릭이 안되는 경우가 더러 있습니다;; (저도 아직 공부중이라 왜 제대로 지정이 안되는지는 의문입니다..)

저는 그럴때 JavascriptExecutor 를 이용합니다.


click, checked=true

이 때 지정해주는 방법으로는 click()checked=true의 방법이 있는데, 비슷하면서도 약간 다릅니다.

click()

((JavascriptExecutor) driver).executeScript("arguments[0].click();", checkbox);

제대로 클릭합니다. 라디오 버튼이나 체크박스를 클릭하는 행위를 트리거로 삼아 동작하는 다른 element들을 확인해야한다면, click()을 사용해야합니다.
가령, 특정 요소를 클릭함에 따라, 다른 select태그 등에서 표시하는 option이 변화한다던지, disabled 처리를 하는 요소들이 있다면, click()을 해야 동작합니다.

checked = true

 ((JavascriptExecutor) driver).executeScript("arguments[0].checked = true;", radiobutton);

라디오버튼이나 체크박스에 체크를 입력하게는 하나, 위와 같이 클릭함으로 인하여 동작하는 다른 interaction 들은 발생시킬 수 없습니다.

이 경우는 form 태그 내부에서 쓰이는 라디오버튼이나 체크박스 중, submit 기능을하는 버튼을 통해 form의 내용을 전송하는 경우에는 유효하게 사용될 수 있습니다.


WebDriver.click() vs JavascriptExecutor.click()

WebDriver로 click을 실행하는 것과, JavascriptExecutor를 이용하여 click을 실행하는 것은, 위에서 말씀드렸다시피, 브라우저상에 보이는 객체를 직접 클릭하냐, 보이지 않는 객체까지 클릭하냐의 차이입니다.
좀 더 자세한 설명은 아래 게시글에 상세히 설명되어있어, 대신합니다.

https://stackoverflow.com/questions/34562061/webdriver-click-vs-javascript-click

Ref

profile
QA Engineer

0개의 댓글