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을 지정해주지 않아도 됩니다.
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를 지정해주면 됩니다.