handling iframes using selenium webdriver switchto method
온라인에서 무료로 애니메이션을 보는 방법
Selenium WebDriver를 사용하여 iFrame 처리 : 실용적인 예제가 포함 된 실습 자습서
iFrame (인라인 프레임)은 다른 HTML 문서에 포함 된 HTML 문서입니다.
iFrame은 웹 페이지 내에서 광고를 표시하는 데 가장 일반적으로 사용됩니다. iFrame은 HTML 태그를 사용하여 HTML 문서에서 명시 적으로 언급됩니다.
이 튜토리얼은 이해하기 쉽도록 관련 코드 예제와 함께 Selenium에서 iframe 처리에 대한 모든 것을 설명합니다.
=> Easy Selenium 교육 시리즈를 읽어보십시오.
학습 내용 :
Selenium을 사용하여 iFrame 처리
아래와 같이 오른쪽 클릭 옵션에‘이 프레임’이라는 옵션이 표시되면 웹 페이지 내의 iframe을 Firefox 브라우저에서 식별 할 수 있습니다.
또는 소스 코드를보고 태그를 검색하여 웹 페이지에 iframe이 있는지 확인할 수도 있습니다.
List iframes = driver.findElements(By.tagName(“iframe”));
iFrame을 처리하기 위해 Selenium에서 제공하는 방법
Selenium은 iframe에서 앞뒤로 전환 할 수있는 다음과 같은 기본 제공 방법을 제공합니다.
- switchTo.frame (int frameNumber)
- switchTo.frame (문자열 frameName)
- switchTo.frame (WebElement frameElement)
- switchTo (). defaultContent ()
# 1) switchTo.frame (int frameNumber)
- 이 방법을 사용하면 프레임 ID를 사용하여 특정 프레임으로 전환 할 수 있습니다.
- 프레임 번호는 0부터 시작하는 인덱스 값으로 웹 페이지의 첫 번째 프레임에는 인덱스 0, 두 번째 프레임에는 인덱스 1, 세 번째 프레임에는 인덱스 3 등이 있습니다.
- 프레임 번호는 요소의 프레임 ID를 사용하여 식별 할 수도 있습니다. 이것은 오른쪽 클릭-> 요소 검사 및 iFrame을 검색합니다. iFrame에 ID 속성이 있는지 확인합니다.
소스 코드의 샘플 iframe 요소는 아래와 같습니다.
iFrame의 id가 확인되면 아래와 같이 프레임으로 전환 할 수 있습니다.
예 :
driver.switchTo.frame ( 'a077aa5e');
driver.switchTo.frame (0);
- 이 메서드는 현재 웹 페이지에서 필요한 프레임을 찾을 수없는 경우 NoSuchFrameException을 발생시킵니다.
# 2) switchTo.frame (string frameName)
- 이 방법을 사용하면 개발자가 정의한 프레임 이름을 사용하여 특정 프레임으로 전환 할 수 있습니다.
- 프레임 이름은 문자열 매개 변수로 간주 되려면 큰 따옴표로 묶어야합니다.
- 이 메서드는 현재 웹 페이지에서 필요한 프레임을 찾을 수없는 경우 NoSuchFrameException을 발생시킵니다.
예:
위에서 언급 한 코드에서 프레임 ID와 프레임 이름은 모두 동일한 값을 유지합니다. 다음과 같이 프레임 이름을 사용하여 프레임으로 전환 할 수 있습니다.
driver.switchTo.frame ( 'a077aa5e');
# 3) switchTo.frame (WebElement frameElement)
- 이 방법을 사용하면 사용자가 웹 요소의 위치에 따라 프레임으로 전환 할 수 있습니다.
- 이 메서드는 필요한 프레임이 웹 페이지에없는 경우 NoSuchFrameException을 throw하고 웹 페이지에 표시된 프레임이 활성화되지 않은 경우 StaleElementReferenceException을 throw합니다.
예:
WebElement frameElement = driver.findElement (By.id (“a077aa5e”));
driver.switchTo.frame (frameElement);
# 4) switchTo (). defaultContent ()
- iframe과 상위 페이지 사이를 앞뒤로 전환하려면 driver.switchTo (). defaultContent () 메서드를 사용하면됩니다.
- Selenium에는 driver.switchTo (). parentFrame () 메서드라는 이름의 프레임간에 전환하는 유사한 메서드가 있습니다.
- driver.switchTo (). defaultContent ()와 driver.switchTo (). parentFrame ()의 차이점은 첫 번째 메서드는 웹 페이지 내의 프레임 수에 관계없이 컨트롤을 기본 웹 페이지로 전환하는 반면 두 번째 메서드는 컨트롤을 현재 프레임의 부모 프레임으로 전환합니다.
예:
상위 웹 페이지 p1 내에 i1, i2 및 i3이라는 세 개의 프레임이 있다고 가정합니다. 프레임 i1, i2 및 i3은 서로 종속되어 있으므로 한 프레임이 다른 프레임의 부모가됩니다.
프레임 i3에서 driver.switchTo (). defaultContent () 메서드를 사용하면 웹 드라이버 컨트롤이 상위 페이지 인 p1로 이동합니다. 프레임 i3의 driver.switchTo (). parentFrame () 메서드는 컨트롤을 프레임 i2 등으로 다시 전환합니다.
소스 코드 샘플 :
다음은 셀레늄에서 iframe을 사용하여 자동화되는 테스트 시나리오입니다.
- SoftwareTestingHelp.com 웹 사이트를 엽니 다.
- iframe 태그가있는 모든 HTML 요소를 찾고, iFrame의 발생 횟수를 세어 콘솔에 인쇄합니다.
- 프레임 ID를 사용하여 웹 페이지에서 유효한 프레임으로 전환하고 프레임의 소스 코드를 인쇄합니다.
- 현재 브라우저 창을 닫습니다.
package Demo; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class iFramesDemo { public static void main(String() args) throws InterruptedException { System.setProperty('webdriver.gecko.driver','D:\Data_Personal\Demo \geckodriver-v0.23.0-win64\geckodriver.exe'); WebDriver driver = new FirefoxDriver(); driver.get('https://www.softwaretestinghelp.com/'); //Finding all iframe tags on a web page List elements = driver.findElements(By.tagName('iframe')); int numberOfTags = elements.size(); System.out.println('No. of Iframes on this Web Page are: ' +numberOfTags); // Switch to the frame using the frame id System.out.println('Switching to the frame'); driver.switchTo().frame('aswift_0'); // Print the frame source code System.out.println('Frame Source' +driver.getPageSource()); // Switch back to main web page driver.switchTo().defaultContent(); driver.quit(); } }
코드 출력 :
웹 사이트 열기 : https://www.softwaretestinghelp.com
aswift_0이라는 프레임으로 전환합니다.
Eclipse 콘솔 창에서 웹 페이지의 iframe 수를 인쇄하십시오.
프레임으로 전환 한 후 Eclipse 콘솔에 프레임의 소스 코드를 인쇄합니다.
코드 설명 :
- System.setProperty 메서드를 사용하여 gecko 드라이버의 개체를 초기화하여 로컬 컴퓨터의 geckodriver.exe 파일 경로를 가리 킵니다.
- 그런 다음 WebDriver 인터페이스를 통해 FireFox 드라이버의 개체를 인스턴스화합니다.
- firefox 드라이버 개체를 사용하여 다음 웹 페이지가 열립니다 : https://www.softwaretestinghelp.com.
- 다음 단계에서는 웹 페이지에 표시되는 iframe 요소의 수를 식별하고 개수를 세고 Eclipse 콘솔에 iframe 수를 표시합니다.
- 프레임 ID를 사용하여 웹 페이지의 프레임으로 전환합니다. 위의 경우 프레임 ID는‘aswift_0’입니다.
- 프레임으로 성공적으로 전환하면 Eclipse 콘솔에 프레임의 소스 코드를 인쇄합니다.
- 그런 다음 driver.switchTo (). defaultContent () 문을 사용하여 상위 웹 페이지로 다시 전환하고 마지막으로 driver.quit 메서드를 사용하여 웹 드라이버 인스턴스를 닫습니다.
Selenium에서 프레임과 iFrame의 차이점
- 프레임은 페이지를 여러 섹션으로 나누는 데 사용되며 각 섹션에는 새 내용이 있습니다.
- iFrame은 교차 사이트 스크립팅 문제를 방지하기 위해 외부 웹 사이트의 콘텐츠를 웹 페이지에 포함하는 데 사용됩니다.
- iFrame을 사용하면 개발자가 타사 웹 사이트의 콘텐츠를 포함 할 수 있으므로 iFrame은 프레임보다 덜 안전한 것으로 간주됩니다. 따라서 iframe은 개발자가 iframe에 삽입 한 콘텐츠를 신뢰해야합니다.
- 오늘날 개발되고있는 대부분의 웹 응용 프로그램은 페이지를 분할하는 데 프레임을 사용하지 않고 iframe을 사용하여 웹 페이지 내에 광고와 같은 외부 콘텐츠를 포함합니다.
Selenium에서 동적 프레임 처리
- 일부 웹 페이지에서는 프레임 ID 및 프레임 이름과 같은 프레임 속성이 웹 페이지에서 동적으로 변경 될 수 있지만 프레임 위치는 동일하게 유지됩니다. 이러한 경우 프레임을 고유하게 식별하기 위해 프레임 ID 또는 프레임 이름을 사용할 수 없습니다.
- 우리는 프레임 인덱스 이러한 경우 프레임 위치를 기반으로 프레임을 고유하게 식별합니다.
- 경우에 따라 프레임 ID 값은 페이지가로드 될 때마다 변경되지만 정적 텍스트는 변경되지 않습니다. 예를 들어 , iframe에 대한 아래 코드를 고려하십시오.
위의 예에서 'frame_'텍스트는 페이지가로드 될 때마다 숫자 값이 변경되는 동안 일정하게 유지됩니다.
- 아래를 사용하여 위의 프레임을 고유하게 식별 할 수 있습니다. XPath
// iframe (contains (@ id,’frame’))
2020 년 3 월 업데이트
프레임 내부의 요소를 찾는 방법
Selenium에서 프레임 내부에있는 요소에 액세스하려면 먼저 프레임 내부를 전환 한 다음 다른 Selenium 로케이터를 사용하여 일반적으로 수행하는 것처럼 요소를 식별해야합니다. Selenium 코드는 IFrame으로 전환하지 않고는 요소를 찾을 수 없습니다.
아래 스크린 샷은 프레임이 HTML 코드에 삽입되는 방식을 보여줍니다.
Selenium을 사용하여 IFrame으로 전환하는 다양한 방법
# 1) 프레임 이름 또는 ID 사용
프레임 이름 또는 프레임 ID를 사용하여 IFrame으로 전환합니다. 때로는 프레임 이름이나 ID 또는 둘 다 코드에 표시됩니다.
통사론:
driver.switchTo().frame(1); // for id driver.switchTo().frame('main'); // for name
# 2) 프레임 인덱스 사용
가능한 경우 프레임 인덱스를 사용하여 프레임을 찾습니다.
통사론:
driver.switchTo().frame(0); // frame index starts with 0
# 3) 웹 요소 사용
Selenium 로케이터를 사용하여 프레임 찾기 .
통사론:
driver.switchTo().frame('Locate the frame using xpath or by any other locator');
프레임을 사용한 기타 작업
# 1) 부모 또는 조상 프레임으로 다시 전환
'switchTo.parentFrame'명령을 사용하여 프레임 3에서 프레임 2로 다시 전환 .
통사론:
driver.switchTo().parentFrame();
# 2) 다른 프레임으로 전환
프레임 3에서 프레임 1 또는 기본 프레임으로 전환하려면 'switchTo.defaultContent'명령을 사용하십시오.
통사론:
driver.switchTo().defaultContent();
아래 코드에서는 프레임 안에있는 이름 텍스트 상자를 찾습니다.
프레임으로 전환하지 않고 직접 찾으려면 어떨까요?
결과를 보겠습니다.
“요소를 찾을 수 없음 : {“method”:”xpath”,”selector”:”// input (@ name =’name’)”} 이유로 코드 실패
이제 웹 요소를 사용하여 프레임 내부를 전환하거나 Selenium 로케이터를 사용하여 텍스트 상자 필드를 찾으십시오.
다음은 프레임 내부 전환을위한 완전한 코드입니다.
package com.wordpress.pages; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Frame { static WebDriver driver; @Test public void Test(){ System.setProperty('webdriver.chrome.driver', 'D:\Srinivas\New folder\exe\chromedriver.exe'); driver = new ChromeDriver(); driver.get('http://www.dwuser.com/education/content/the-magical-iframe-tag-an-introduction/'); //identifying the frame using locator or say using webelement driver.switchTo().frame(driver.findElement(By.xpath('//div(@id='eduFooterWrap')//iframe(1)'))); driver.findElement(By.xpath('//input(@name='name')')).sendKeys('SoftwareTestingHelp.com'); } }
산출:
이것이 Selenium을 사용하여 요소를 찾기 위해 프레임 사이를 전환하는 방법입니다. 웹 페이지에 여러 프레임이있는 경우 여러 번 전환해야합니다.
결론
- iFrame은 다른 HTML 문서에 포함 된 HTML 문서입니다. iFrame은 HTML 태그를 사용하여 HTML 문서에서 명시 적으로 언급됩니다.
- switchTo.frame (int frameNumber) 메서드를 사용하면 사용자가 프레임 ID를 사용하여 특정 프레임으로 전환 할 수 있습니다.
- switchTo.frame (string frameName) 메서드를 사용하면 개발자가 정의한 프레임 이름을 사용하여 특정 프레임으로 전환 할 수 있습니다.
- switchTo.frame (WebElement frameElement) 메서드를 사용하면 사용자가 웹 요소의 위치에 따라 프레임으로 전환 할 수 있습니다.
=> 여기에서 모든 Selenium 자습서를 확인하십시오.
추천 도서
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- 첫 번째 WebDriver 스크립트 구현 – Selenium WebDriver Tutorial # 10
- 셀레늄 FAQ
- Selenium WebDriver에서 경고 / 팝업을 처리하는 방법-Selenium Tutorial # 16
- Selenium 스크립트에서 웹 테이블, 프레임 및 동적 요소 처리 – Selenium Tutorial # 18
- Selenium WebDriver의 암시 적 및 명시 적 대기 (Selenium 대기 유형)
- Selenium WebDriver에서 익스텐트 보고서 생성 가이드