Frames and Drag & Drop

Dahun Yoo·2020년 5월 21일
0

Frames

Frames is component. Container. Separately
내용을 독립적으로 보여주는 컨테이너와 같은 존재. 한 페이지에서 다른 페이지를 새롭게 표시하고자 할 때 사용되는 요소입니다.

그러나 Selenium은 frame을 핸들링할 수 없습니다.
명시적으로 제어를 해주어야하는데요, switchTo().frame() 를 사용하게 되면 프레임을 인식할 수 있게 됩니다.

frame()은 3가지 종류가 존재하는데, 인덱스나 문자열 혹은 webElement로 지정해줄 수 있음.

인덱스로 지정해줄 때는, 페이지에 frame이 몇개나 있는지 확인을 해주어야하는데, 이때는 findElements(By.tagName(“”)).size()로 확인해줄 수 있음.

driver.switchTo().frame(driver.findElement(By.xpath("//*[@id=\"content\"]/iframe")));

WebElement dragBox, dropBox;

dragBox = driver.findElement(By.xpath("//*[@id=\"draggable\"]"));
dropBox = driver.findElement(By.xpath("//*[@id=\"droppable\"]"));
Actions action = new Actions(driver);

action.dragAndDrop(dragBox, dropBox).build().perform();
driver.switchTo().defaultContent(); //원래 기본으로 되돌리는 것.

iframe에서의 확인이 끝났으면, 다시 switchTo().defaultContent()로 전환해주면 됩니다..
switchTo() 로 iframe을 다루다가 다시 원래 page로 돌아가는 것입니다.

Selenium 4.0이상부터는, iframe에서 상위 iframe으로 돌아가고자할 때는 parentFrame() 을 사용할 수 있습니다. 이것을 사용하면 defaultContent() 를 이용해서 처음으로 되돌아가 다시 iframe을 지정해주지 않아도 됩니다.


Drag and Drop

driver.switchTo().frame(driver.findElement(By.xpath("//*[@id=\”content\”]/iframe")));

WebElement dragBox, dropBox;
dragBox = driver.findElement(By.xpath("//*[@id=\"draggable\”]"));
dropBox = driver.findElement(By.xpath(""//*[@id=\”droppable\”]"));
Actions action = new Actions(driver);

action.dragAndDrop(dragBox, dropBox).build().perform();


Thread.sleep(3000);
driver.close();

dragAndDrop()에서 drag할 element와 drop할 element를 지정해주면 됩니다.


profile
QA Engineer

0개의 댓글