Articles

첫 번째 셀레늄 Webdriver 스크립트:JAVA 샘플 코드를 들어

를 사용하 Java 클래스”myclass”우리는 우리에서 만든 이전 튜토리얼에서,우리가 만들려고 하 WebDriver 스크립트는:

  1. 가져올 수은 투어’홈페이지
  2. 지 확인하는 제목
  3. 인쇄 결과의 비교
  4. 그것을 닫기 전에 종이 전체 프로그램입니다.

WebDriver Code

아래는 위의 시나리오에서 제시 한 논리에 대한 실제 WebDriver 코드입니다.

참고: Firefox35 를 시작하면 Mozilla 에서 만든 gecko 드라이버를 사용하여 웹 드라이버를 사용해야합니다. Selenium3.0,gecko 및 firefox 에는 호환성 문제가 있으며이를 올바르게 설정하면 오르막 작업이 될 수 있습니다. 코드가 작동하지 않으면 Firefox 버전 47 이하로 다운 그레이드하십시오. 또는 Chrome 에서 스크립트를 실행할 수도 있습니다. 셀레늄은 크롬 용 상자 밖으로 작동합니다. 당신만을 변경할 필요 3 라인의 코드를 스크립트 작업과 크롬 또는 Firefox

package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;//comment the above line and uncomment below line to use Chrome//import org.openqa.selenium.chrome.ChromeDriver;public class PG1 { public static void main(String args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");WebDriver driver = new FirefoxDriver();//comment the above 2 lines and uncomment below 2 lines to use Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");//WebDriver driver = new ChromeDriver(); String baseUrl = "http://demo.guru99.com/test/newtours/"; String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = ""; // launch Fire fox and direct it to the Base URL driver.get(baseUrl); // get the actual value of the title actualTitle = driver.getTitle(); /* * compare the actual title of the page with the expected one and print * the result as "Passed" or "Failed" */ if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); } //close Fire fox driver.close(); }}

을 설명하는 코드

시작하려면,당신을 가져올 필요가 다음 두 패키지:나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.오픈카.셀레늄.*-특정 드라이버

  • org 로로드 된 새 브라우저를 인스턴스화하는 데 필요한 WebDriver 클래스를 포함합니다.오픈카.셀레늄.파이어 폭스.FirefoxDriver-이 포함 FirefoxDriver 래하는 데 필요한 인스턴스화 파이어 폭스-특정 드라이버에 브라우저 인스턴스화에 의해 WebDriver class
  • 경우에 당신의 테스트 요구에 더 복잡는 등의 작업에 액세스하는 다른 클래스를 복용하는 브라우저 스크린샷이나 조작 외부 파일을 확실히 당신이 가져올 필요가 많습니다.

    객체와 변수를 인스턴스화

    일반적으로 드라이버 객체가 인스턴스화되는 방법입니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    A FirefoxDriver 클래스를 매개 변수 없는 것을 의미 Firefox 기본 프로 시작됩니다 우리는 Java 프로그램입니다. 기본 Firefox 프로필은 안전 모드에서 Firefox 를 시작하는 것과 유사합니다(확장 프로그램이로드되지 않음).

    편의를 위해 기본 URL 과 예상 제목을 변수로 저장했습니다.

    시작하는 브라우저 세션

    WebDriver 의()메서드를 사용하여 발사 새로운 브라우저 세션이 안내하는 URL 을 지정한 매개 변수로 사용합니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    실제 페이지 제목

    WebDriver 클래스 getTitle()메소드는 항상을 가져오는 데 사용하는 페이지 제목의 현재 로드된 페이지입니다.

    첫 번째 Selenium Webdriver 스크립트: 자바 코드를 들어

    을 비교하고 예상과 실제 값

    이 부분의 코드 간단히 사용하는 기본 Java 는 경우-다른 구조를 비교하는 실제 제목으로 예상한 하나입니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    종료하는 브라우저 세션

    “close()”방법을 사용하는 브라우저 창을 닫습니다.

    첫 번째 Selenium Webdriver 스크립트: 자바 코드를 들어

    종료하는 전체 프로그램

    이 명령을 사용하여 여밈없이 모든 브라우저 윈도우 첫째,전체 Java 프로그램을 종료됩니다면 브라우저 창이 열립니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    실행하는 테스트

    두 가지 방법이 있는 코드를 실행하 Eclipse IDE 입니다. 이클립스의 메뉴 표시 줄에서

    1. >실행.
    2. Ctrl+F11 을 눌러 전체 코드를 실행하십시오.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    정확하게 모든 것을 한 경우,Eclipse 것 출력”로 테스트됩니다.”

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    찾기 GUI 요소

    요소의 위치에서 WebDriver 사용하여 수행됩”findElement(습니다.로케이터())”방법. 코드의”로케이터”부분은 이전에 이러한 자습서의 Selenium IDE 장에서 설명한 로케이터 중 하나와 동일합니다. Infact 는 IDE 를 사용하여 GUI 요소를 찾고 일단 성공적으로 확인되면 코드를 WebDriver 로 내보내는 것이 좋습니다.

    다음은 id 로 요소를 찾는 셀레늄 샘플 코드입니다. Facebook 은 기본 URL 로 사용됩니다.

    package newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG2 { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String baseUrl = "http://www.facebook.com"; String tagName = ""; driver.get(baseUrl); tagName = driver.findElement(By.id("email")).getTagName(); System.out.println(tagName); driver.close(); System.exit(0);}}

    우리가 사용 getTagName()메서드를 추출하는 태그의 이름을 특정 요소의 id 은”이메일”. 실행시이 코드는 태그 이름”입력”을 올바르게 식별 할 수 있어야하며 Eclipse 의 콘솔 창에 인쇄됩니다.

    첫 번째 Selenium Webdriver 스크립트: 자바 코드를 들어

    요약를 찾기 위해 요소

    변형 Description 샘플
    습니다.className 는”class”속성 findElement(By.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.cssSelector 는 드라이버의 기본 CSS 선택기 엔진을 기반으로 요소를 찾습니다. findElement(By.cssSelector(“input#이메일”))
    습니다.id 를 찾아에 의해 요소의 가치”id”속성 findElement(습니다.id(“someId”))
    습니다.linkText findElement(By.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.By.name 는”name”속성 findElement(By.name(“someName”))
    By.partialLinkText locates elements that contain the given link text findElement(By.partialLinkText(“REG”))
    By.tagName locates elements by their tag name findElement(By.tagName(“div”))
    By.xpath locates elements via XPath findElement(By.xpath(“//html/body/div/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/form/table/tbody/tr”))

    findElement(By.나는 이것이 내가 할 수있는 일이 아니라고 생각한다.cssSelector()는”포함”기능을 지원하지 않습니다. 을 고려한 셀레늄 IDE 아래 코드-

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    셀레늄 IDE 위,전체를 테스트를 통과했다. 그러나 아래의 Selenium WebDriver 스크립트에서 동일한 테스트에서 Webdriver 가 By 에서 사용할 때”포함”키워드를 지원하지 않기 때문에 오류가 발생했습니다.cssSelector()메소드.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    일반적인 명령

    인스턴스화는 웹 요소

    사용하는 대신에 오랫동안”드라이버입니다.findElement(로.locator())”구문 특정 요소에 액세스 할 때마다 WebElement 객체를 인스턴스화 할 수 있습니다. WebElement 클래스는”org.오픈카.셀레늄.*”패키지.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    을 클릭하는 요소

    클릭하면 아마도 가장 일반적인 방식의 상호작용으로 웹 요소입니다. 클릭()메서드는 모든 요소의 클릭을 시뮬레이션하는 데 사용됩니다. 다음 Selenium Java 예제는 Click()이 Mercury Tours 의”로그인”버튼을 클릭하는 데 사용 된 방법을 보여줍니다.

    첫 번째 Selenium Webdriver 스크립트: JAVA 코드 예제

    click()메소드를 사용할 때 다음 사항에주의해야합니다.

    • 매개 변수/인수를 취하지 않습니다.
    • 해당되는 경우 메서드가 자동으로 새 페이지가로드 될 때까지 기다립니다.
    • 클릭 할 요소가 표시되어야합니다(높이와 너비가 0 과 같지 않아야 함).

    명령 가져 오기

    명령 가져 오기 페이지/요소에 대한 다양한 중요한 정보를 가져옵니다. 다음은 숙지해야하는 몇 가지 중요한”가져 오기”명령입니다.

    명령 사용
    (일)샘플을 사용:
    • 그것은 자동으로 열리는 새로운 브라우저 창을 가져 지정하는 페이지 안에 괄호를 사용합니다.
    • Selenium IDE 의”open”명령의 대응 물입니다.
    • 매개 변수는 문자열 객체이어야합니다.
    getTitle()샘플 사용법:
    • 필요 없는 매개변수
    • 를 가져 오는 현재 페이지의 제목
    • 선도하고 후행 공백질
    • null 을 반환하는 경우 문자열이 페이지가 없 제목
    getPageSource()샘플을 사용:
    • 필요 없는 매개변수
    • 반환하는 소스 코드 페이지의 문자열 값으로
    getCurrentUrl()샘플 사용:
    • 필요 없는 매개변수
    • 를 가져 나타내는 문자열은 현재 URL 이는 브라우저에서 찾고 있
    getText()샘플을 사용:
    • 가져옵 내부에 텍스트의 요소를 지정할

    탐색하는 명령

    이러한 명령할 수 있를 새로 고침 이동으로 앞뒤로 전환하는 다른 웹 페이지입니다. 나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.to()샘플 사용법:

    • 자동으로 새 브라우저 창을 열고 괄호 안에 지정한 페이지를 가져옵니다.
    • 그것은 get()메소드와 정확히 같은 일을합니다.나는 이것이 내가하는 일이 아니라고 생각한다.refresh()샘플 사용:
    • 매개 변수가 필요하지 않습니다.
    • 현재 페이지를 새로 고칩니다.나는 이것이 내가하는 일이 아니라고 생각한다.back()샘플 사용법:
    • 는 매개 변수가 필요하지 않습니다
    • 는 브라우저 기록에서 한 페이지로 다시 이동합니다.나는 이것이 내가하는 일이 아니라고 생각한다.앞으로()샘플 사용법:
    • 는 매개 변수가 필요하지 않습니다
    • 는 브라우저의 기록에 한 페이지로 전달됩니다.

    닫고 종료한 브라우저 윈도우

    close()샘플을 사용:
    • 필요 없는 매개변수
    • 닫만 브라우저 창 WebDriver 현재 통제하고 있다.
    quit()샘플 사용법:
    • 매개 변수가 필요하지 않습니다.
    • WebDriver 가 연 모든 창을 닫습니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    를 명확하게 설명하 사이의 차이는 마지막()및 종료(),을 실행하려고 아래 코드. 페이지로드시 창을 자동으로 팝업하고 종료 한 후 다른 창을 여는 웹 페이지를 사용합니다.

    첫 번째 Selenium Webdriver 스크립트: JAVA Code Example

    상위 브라우저 창만 닫히고 두 개의 팝업 창이 아님을 알 수 있습니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    그러나 사용하는 경우 종료()모든 windows 폐쇄됩니다-하지만 부모니다. 아래 코드를 실행하려고하면 위의 두 팝업이 자동으로뿐만 아니라 폐쇄 될 것을 알 수 있습니다.

    package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG3 { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.popuptest.com/popuptest2.html"); driver.quit(); // using QUIT all windows will close }}

    스위칭 프레임 사이의

    GUI 에 액세스하는 요소 프레임에서,우리는 첫 번째 직접 WebDriver 에 초점을 프레임 또는 팝업 창하기 전에 우리는 먼저 액세스할 수 있는 요소가 있습니다. 우리가 예를 들어,웹페이지http://demo.guru99.com/selenium/deprecated.html

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    이 페이지에는 3 개의 프레임의”이름에”속성이 표시됩니다. 우리는 노란색으로 위에 둘러싸인”사용되지 않는”링크에 액세스하고자합니다. 이를 위해서는 먼저 WebDriver 에”switchto()를 사용하여”classFrame”프레임으로 전환하도록 지시해야합니다.프레임()”방법. 우리는”프레임()”부분에 대한 매개 변수로 프레임의 이름 속성을 사용합니다.

    package newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG4 { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); }}

    이 코드를 실행하면,당신은 당신이 볼 것”classFrame”프레임을”Deprecated API”페이지의 의미는 우리의 코드가 성공적으로 액세스할 수 있는”사용”링크를 클릭합니다.

    팝업 창 간 전환

    WebDriver 를 사용하면 selenium IDE 와 달리 경고와 같은 팝업 창을 표시 할 수 있습니다. 경고 내의 요소(예:포함 된 메시지)에 액세스하려면”switchTo()를 사용해야합니다.경고()”방법. 아래 코드에서는,우리는 이 방법을 사용하여 액세스하는 경우 검색을 사용하여 메시지”getText()”방법,그리고 다음 자동으로 닫을 경고 상자를 사용하는”switchto 는().경고().수락()”메소드.먼저http://jsbin.com/usidix/1로 이동하여 수동으로”Go!”버튼을 거기에 자신을 위해 메시지 텍스트를 참조하십시오.

    첫 번째 Selenium Webdriver 스크립트: 자바 코드를 들어

    을 볼 수 있습 셀레늄 예제 코드를 이렇-

    package mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class myclass { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String alertMessage = ""; driver.get("http://jsbin.com/usidix/1"); driver.findElement(By.cssSelector("input")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); }}

    On the Eclipse 콘솔,통지하고 있는 경고 메시지는 다음과 같습니다.

    첫 번째 셀레늄 Webdriver 스크립트: 자바 코드를 들어

    기다립니다

    두 가지 종류의 기다립니다.

    1. 암시적 기다려 사용되는 기본값을 설정하려면 기다리고 시간에 걸쳐 프로그램
    2. 명시적 기대를 설정하는 데 사용 시간을 기다리고 특정한 인스턴스를 만

    암시적 기

    • 그것은 간단한 코드는 명시적 기다립니다.
    • 일반적으로 코드의 인스턴스화 부분에서 선언됩니다.
    • 가져 오려면 하나의 추가 패키지 만 있으면됩니다.

    암시 적 대기를 사용하기 시작하려면이 패키지를 코드로 가져와야합니다.

    첫 번째 Selenium Webdriver 스크립트: JAVA 코드 예제

    그런 다음 코드의 인스턴스화 부분에 이것을 추가하십시오.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    명시적 기

    명시기를 사용하여 수행됩 WebDriverWait 및 ExpectedCondition 클래스입니다. 다음 Selenium WebDriver 예제의 경우 다음 명령을 진행하기 전에 id 가”사용자 이름”인 요소가 표시 될 때까지 최대 10 초 동안 기다려야합니다. 다음은 단계입니다.

    1 단계

    이 두 패키지 가져 오기:

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    단계 2

    선언 WebDriverWait 변수입니다. 이 예제에서는”myWaitVar”를 변수 이름으로 사용합니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    단계 3

    사용 myWaitVar 와 ExpectedConditions 부분에 할 필요가있는 곳에 명시적 기다려 발생합니다. 이 경우,우리가 사용하여 명시적 기다리에서”사용자 이름”(수은 투어 홈페이지)입력하기 전에 우리는 입력한 텍스트”튜토리얼”니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    조건

    다음과 같은 방법을 사용 조건 및 반복 작업–

    • isEnabled() 을 사용할 때 원하는지 여부를 확인하고 특정 요소 사용 또는지 명령을 실행하기 전에.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    • 가 표시되()를 사용할 때 원하는지 여부를 확인하고 특정 요소가 표시되는지 명령을 실행하기 전에.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    • isSelected()를 사용하고 싶을 때는지 여부를 확인 일정을 확인 상자,라디오 버튼이나,옵션에서 드롭다운 상자를 선택합니다. 다른 요소에서는 작동하지 않습니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    를 사용하여 ExpectedConditions

    ExpectedConditions 클래스를 제공합 더 넓은 세트에 사용할 수 있는 조건과 함께 WebDriverWait 까지()메소드가 있습니다. 다음은 가장 일반적인 예상 조건 방법 중 일부입니다.

    • alertIsPresent()-경고 상자가 표시 될 때까지 기다립니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    • elementToBeClickable()-을 때까지 대기하는 요소입니다 볼 수 있고,같은 시간에 사용됩니다. 샘플 셀레늄 코드는 아래 기다릴 것입니다까지 요소가 표시되고 사용하기 전에 먼저 할당하는 요소로 WebElement 라는 변수”txtUserName”.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    • frameToBeAvailableAndSwitchToIt()-대기까지 주어진 프레임은 이미 사용할 수 있는,그리고 다음 자동으로 전환합니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    길을 끄는 예외

    사용하는 경우 isEnabled(),가 표시되()및 isSelected(),WebDriver 정 요소에 이미 있는 페이지입니다. 그렇지 않으면 NoSuchElementException 을 던질 것입니다. 이를 방지하려면 프로그램이 중단되지 않도록 try-catch 블록을 사용해야합니다.

    WebElement txtbox_username = driver.findElement(By.id("username"));try{ if(txtbox_username.isEnabled()){ txtbox_username.sendKeys("tutorial"); } }catch(NoSuchElementException nsee){ System.out.println(nsee.toString()); }

    명시 적 대기를 사용하는 경우 캐치해야하는 예외 유형은”TimeoutException”입니다.

    첫 번째 셀레늄 Webdriver 스크립트:자바 코드를 들어

    요약

    • 로 시작을 사용하여 WebDriver API 를 가져와야 합니다 적어도 이러한 두 개의 패키지가 있습니다.
    • org.오픈카.셀레늄.*
    • org.오픈카.셀레늄.파이어 폭스.FirefoxDriver
    • get()메소드는 Selenium IDE 의”open”명령과 동일합니다.
    • WebDriver 에서 요소를 찾는 것은 findElement()메소드를 사용하여 수행됩니다.
    • 다음은 WebDriver 에서 요소를 찾는 데 사용할 수있는 옵션입니다.
    • By.클래스 이름
    • By.나는 이것이 어떻게 작동하는지 잘 모르겠습니다.By.id
    • By.링크 텍스트
    • By.name
    • By.나는 이것이 어떻게 작동하는지 잘 모르겠습니다.tagName
    • By.xpath
    • By.cssSelector()는”포함”기능을 지원하지 않습니다.
    • WebElement 클래스를 사용하여 요소를 인스턴스화 할 수 있습니다.
    • 요소를 클릭하는 것은 click()메소드를 사용하여 수행됩니다.
    • WebDriver 는 이러한 유용한 get 명령을 제공합니다:
    • get()
    • getTitle()
    • getPageSource()
    • getCurrentUrl()
    • getText()
    • WebDriver provides these useful navigation commands
    • navigate().forward()
    • navigate().back()
    • navigate().to()
    • navigate().refresh()
    • The close() and quit() methods are used to close browser windows. Close()는 단일 창을 닫는 데 사용되며,while quit()은 WebDriver 개체가 제어하고 있던 상위 창에 연결된 모든 창을 닫는 데 사용됩니다.
    • switchTo().프레임()및 스위치토().alert()메소드는 WebDriver 의 포커스를 각각 프레임 또는 경고에 지시하는 데 사용됩니다.
    • 암시 적 대기는 프로그램 전체에서 대기 시간을 설정하는 데 사용되는 반면 명시 적 대기는 특정 부분에서만 사용됩니다.
    • 요소의 상태를 확인할 때 isEnabled(),isDisplayed(),isSelected()및 WebDriverWait 및 ExpectedConditions 메서드의 조합을 사용할 수 있습니다. 그러나 요소가 존재하지 않는지 확인하지 않습니다.
    • isenabled(),isDisplayed()또는 isselected()가 요소가 존재하지 않는 동안 호출되면 WebDriver 는 NoSuchElementException 을 던집니다.
    • 요소가 존재하지 않는 동안 WebDriverWait 및 ExpectedConditions 메소드가 호출되면 WebDriver 가 TimeoutException 을 던집니다.

    참고:

    드라이버.가져 오기() : 그것은로 이동하는 데 사용되는 특정 웹 사이트,하지만 그렇지 않을 유지하는 브라우저 기록하고 가능한 솔루션 개발에 앞장서는,우리가 사용할 수 없습 앞과 뒤로 버튼을 클릭하면 우리는 해당 페이지를 얻지 않을 것이 일정

    드라이버입니다.탐색():그것은로 이동하는 데 사용되는 특정 웹 사이트이지만,그것은 유지 브라우저의 역사와 쿠키를,그래서 우리가 사용할 수 있습니다 앞과 뒤로 버튼을 사이를 이동하는 중에 페이지의 코딩 사례