자동화테스트/Selenium2018. 11. 20. 08:00

forms(양식)은 웹 사이트 방문자로부터 정보를받는 기본 웹 요소입니다. web forms(웹 양식)에는 텍스트 상자, 암호 필드, 체크 상자, 라디오 단추, 드롭 다운, 파일 입력 등과 같은 다른 GUI 요소가 있습니다.

우리는 자바와 함께 Selenium Web Driver를 사용하여 이러한 다양한 폼 요소에 액세스하는 방법을 볼 것입니다. Serenium은 모든 양식 요소를 WebElement의 객체로 캡슐화합니다. 요소를 찾고 텍스트 상자에 텍스트를 입력하고 버튼을 클릭하는 등의 작업을 수행하는 API를 제공합니다. 각 양식 요소에 액세스하는 데 사용할 수있는 메소드가 표시됩니다.

이 자습서에서는 다음 양식 요소를 식별하는 방법을 설명합니다

WebElement 소개, findElement (), findElements ()

Selenium Web Driver는 WebElement 의 객체로 간단한 양식 요소를 캡슐화합니다 .

WebDriver가 ID, 이름, 클래스, XPath, Tagname, CSS 선택자, 링크 텍스트 등과 같은 웹 요소의 다양한 속성을 기반으로 양식 요소를 식별하는 다양한 기술이 있습니다.

웹 드라이버는 요소를 찾기 위해 다음 두 가지 방법을 제공합니다.

  • findElement () - 단일 웹 요소를 찾아 WebElement 객체로 반환합니다.
  • findElements () - 로케이터 기준과 일치하는 WebElement 객체의 목록을 반환합니다.

findElement () 메소드를 사용하여 웹 페이지의 텍스트 필드를 WebElement의 객체로 가져 오는 코드 스 니펫을 살펴 보겠습니다. 후속 튜토리얼에서 여러 요소를 찾는 findElements () 메소드를 다룰 것이다.

1 단계 : 웹 요소의 개체를 만들려면이 패키지를 가져와야합니다.

2 단계 : WebDriver 클래스에서 사용할 수있는 findElement () 메서드를 호출하고 WebElement의 객체를 가져와야합니다.

어떻게 수행되는지 보려면 아래를 참조하십시오.

입력 상자

입력 상자는 다음 두 가지 유형 중 하나를 나타냅니다.

  1. 텍스트 필드 - 입력 된 값을 받아들이고 그대로 표시하는 텍스트 상자입니다.
  2. 암호 필드 - 입력 된 값을 받아들이지 만 민감한 값이 표시되지 않도록 일련의 특수 문자 (일반적으로 점 및 별표)로 마스킹하는 텍스트 상자입니다.

로케이터

findElement () 메소드는 요소에 대한 위치 지정자 인 하나의 매개 변수를 취합니다. By.id (), By.name (), By.xname (), By.xpath (), By.CSSSelector () 등의 다른 로케이터는 페이지의 요소를````id, name 또는 path와 같은 속성을 사용하여 찾습니다. 

Fire path와 같은 플러그인을 사용하면 요소의 id, xpath 등을 얻는 데 도움을받을 수 있습니다.

 ID 로케이터와 이름 로케이터를 사용하여 "비밀번호"필드를 사용하여 "이메일 주소"텍스트 필드를 찾을 수 있습니다.

  1. 이드는 이메일 텍스트 필드를 찾았습니다.
  2. 암호 필드는 이름으로 위치합니다.

입력란에 값 입력하기

텍스트 필드 및 암호 필드에 텍스트를 입력하려면 sendKeys ()가 WebElement에서 사용할 수있는 메서드입니다.

텍스트 입력란과 비밀번호 입력란을 찾고 값을 입력하는 방법은 다음과 같습니다.

  1. 아이디 로케이터를 사용하여 "전자 메일 주소"텍스트 필드를 찾습니다.
  2. 이름 찾기를 사용하여 "비밀번호"입력란을 찾으십시오.
  3. sendKeys () 메소드를 사용하여 "Email Address"에 텍스트를 입력하십시오.
  4. sendKeys () 메소드를 사용하여 "비밀번호"필드에 비밀번호를 입력하십시오.

입력란에서 값 삭제

분명 () 메서드는 입력 상자의 텍스트를 삭제하는 데 사용됩니다. 이 메서드에는 매개 변수가 필요하지 않습니다 . 아래의 코드 스 니펫은 이메일 또는 비밀번호 입력란의 텍스트를 지 웁니다.

버튼

단추는 click () 메소드를 사용하여 액세스 할 수 있습니다.

위의 예에서

  1. 로그인 버튼을 찾아 로그인하십시오.
  2. 사이트의 로그인 페이지에서 "로그인"버튼을 클릭하여 사이트에 로그인하십시오.

제출 버튼

제출 단추는 전체 양식을 서버에 제출하는 데 사용됩니다. 위에 설명한 것처럼 일반 버튼처럼 web 요소에서 click () 메서드를 사용하거나 양식의 모든 웹 요소 또는 submit 버튼 자체에서 submit () 메서드를 사용할 수 있습니다.

submit ()을 사용하면 WebDriver가 DOM을 검색하여 요소가 속한 양식을 확인한 다음 제출 기능을 트리거합니다.

라디오 버튼(Radio Button)

라디오 버튼도 click () 메소드를 사용하여 토글 할 수 있습니다.

연습을 위해 http://demo.guru99.com/test/radio.html 을 사용하여 radio1.click ()이 "Option1"라디오 버튼을 토글하는지 확인하십시오. radio2.click ()은 "Option1"을 선택하지 않은 상태에서 "Option2"라디오 버튼을 토글합니다.

체크박스(Check Box)

체크 박스를 켜기 / 끄기로 전환하는 작업은 click () 메서드를 사용하여 수행 할 수도 있습니다 .

아래의 코드는 페이스 북의 "로그인 상태 유지"체크 상자를 두 번 클릭 한 다음 토글 한 경우 TRUE, 토글 한 경우 FALSE로 결과를 출력합니다.

isSelected () 메서드는 Checkbox가 켜지거나 꺼져 있는지 여부를 확인하는 데 사용됩니다.

다른 예가 있습니다 : 

Complete Code

다음은 완전한 작업 코드입니다.

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.*; public class Form { public static void main(String[] args) { // 객체 / 변수의 선언 및 인스턴스화 System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String baseUrl = "http://demo.guru99.com/test/login.html"; driver.get(baseUrl); // 전자 메일 주소 WebElement에 해당하는 (TextField) WebElement 가져 오기 WebElement email = driver.findElement(By.id("email"));      // Password 필드에 해당하는 (TextField) WebElement 가져 오기 WebElement password = driver.findElement(By.name("passwd")); email.sendKeys("abcd@gmail.com"); password.sendKeys("abcdefghlkjl"); System.out.println("Text Field Set"); // 텍스트 상자에서 값 삭제 email.clear(); password.clear(); System.out.println("Text Field Cleared"); // 제출 버튼 찾기 WebElement login = driver.findElement (By.id ( "SubmitLogin")); // 클릭 메서드를 사용하여 email.sendKeys("abcd@gmail.com"); password.sendKeys("abcdefghlkjl"); login.click(); System.out.println("Login Done with Click"); //양식을 제출하는 방법을 제출하여 암호 필드에 submit합니다. driver.get(baseUrl); driver.findElement(By.id("email")).sendKeys("abcd@gmail.com"); driver.findElement(By.name("passwd")).sendKeys("abcdefghlkjl"); driver.findElement(By.id("SubmitLogin")).submit(); System.out.println("Login Done with Submit"); driver.get("http://demo.guru99.com/test/radio.html"); WebElement radio1 = driver.findElement(By.id("vfb-7-1")); WebElement radio2 = driver.findElement(By.id("vfb-7-2")); // Radio Button1이 선택되었습니다. radio1.click(); System.out.println("Radio Button Option 1 Selected"); // Radio Button1이 선택 해제되고 Radio Button2가 선택되었습니다. radio2.click(); System.out.println("Radio Button Option 2 Selected"); // CheckBox WebElement 선택 WebElement option1 = driver.findElement(By.id("vfb-6-0")); //이 옵션은 체크 박스를 토글합니다 . option1.click (); // 체크 박스가 켜져 있는지 확인 if (option1.isSelected()) { System.out.println("Checkbox is Toggled On"); } else { System.out.println("Checkbox is Toggled Off"); } // Checkbox를 선택하고 isSelected 메소드를 사용하기 driver.get("http://demo.guru99.com/test/facebook.html"); WebElement chkFBPersist = driver.findElement(By.id("persist_box")); for (int i=0; i<2; i++) { chkFBPersist.click (); System.out.println("Facebook Persists Checkbox Status is - "+chkFBPersist.isSelected()); } //driver.close(); } }

문제 해결

요소를 찾는 동안 NoSuchElementException ()이 발생하면 웹 드라이버가 페이지에 액세스 한 시점의 요소가 페이지에서 발견되지 않음을 의미합니다.

  1. Firepath 또는 Chrome의 요소 검사를 사용하여 로케이터를 다시 확인하십시오.
  2. 코드에서 사용한 값이 Firepath의 요소 ​​값과 다른지 확인하십시오.
  3. 일부 속성은 몇 가지 요소에 대해 동적입니다. 값이 다르며 동적으로 변경되는 경우에는 더 신뢰할 만하지만 복잡한 방법 인 By.xpath () 또는 By.cssSelector ()를 사용하는 것이 좋습니다.
  4. 때로는 대기 문제 일 수도 있습니다. 즉, 페이지가 완전히로드되기 전에 웹 드라이버가 코드를 실행했습니다.
  5. 암시 적 또는 명시 적 대기를 사용하여 findElement () 전에 대기 시간을 추가하십시오.

개요

  • 아래 표는 위에 논의 된 각 요소 유형에 액세스하는 명령을 요약 한 것입니다
ElementCommandDescription
Input BoxsendKeys()텍스트 상자에 값을 입력하는 데 사용됩니다.
clear()현재 값의 텍스트 상자를 지우는 데 사용됩니다.
Check Box,Radio Button,click()요소를 켜기 / 끄기로 전환하는 데 사용됩니다.
Linksclick()링크를 클릭하고 다음 명령으로 진행하기 전에 페이지로드가 완료되기를 기다리는 데 사용됩니다.
Submit Buttonsubmit()

  • WebDriver를 사용하면 여러 SELECT 요소에서 둘 이상의 옵션을 선택할 수 있습니다.
  • 양식 내의 모든 요소에 대해 submit () 메소드를 사용할 수 있습니다. WebDriver는 해당 요소가 속한 양식의 제출 기능을 자동으로 트리거합니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Posted by 프리스케이터