문제

나는 단지 Selenium(http://selenium.openqa.org) 저는 WaTiN에 대해 많은 경험을 갖고 있으며 WaTiN을 위한 녹음 모음을 작성하기도 했습니다.나는 잘 구조화된 코드를 생성했지만 나만 유지 관리하므로 회사에서 거의 포기한 것 같습니다.셀레늄을 실행했다면 많은 성공을 거두었습니까?저는 .NET 3.5를 사용할 예정입니다. Selenium이 이 버전과 잘 작동합니까?생성된 코드는 깨끗합니까, 아니면 단순히 모든 상호 작용의 목록입니까?(http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx) 분산 테스트 스위트는 얼마나 잘 공정합니까?

시스템에 대한 다른 불만이나 칭찬은 대단히 감사하겠습니다!

도움이 되었습니까?

해결책

당신이 사용하는 경우 셀레늄 IDE 코드를 생성하면 셀레늄이 실행할 모든 작업의 ​​목록을 얻을 수 있습니다.나에게 Selenium IDE는 빠른 "시도 및 확인" 테스트를 시작하거나 수행하는 좋은 방법입니다.그러나 유지 관리성과 더 읽기 쉬운 코드를 고려한다면 자신만의 코드를 작성해야 합니다.

좋은 셀레늄 코드를 얻는 좋은 방법은 다음을 사용하는 것입니다. 페이지 개체 패턴 코드가 탐색 흐름을 나타내는 방식으로.다음은 내가 본 좋은 예입니다. 코딩 도장 플로리파 (브라질로부터):

public class GoogleTest {

    private Selenium selenium;

    @Before
    public void setUp() throws Exception {
            selenium = new DefaultSelenium("localhost", 4444, "*firefox",
                            "http://www.google.com/webhp?hl=en");
            selenium.start();
    }

    @Test
    public void codingDojoShouldBeInFirstPageOfResults() {
            GoogleHomePage home = new GoogleHomePage(selenium);
            GoogleSearchResults searchResults = home.searchFor("coding dojo");
            String firstEntry = searchResults.getResult(0);
            assertEquals("Coding Dojo Wiki: FrontPage", firstEntry);
    }

    @After
    public void tearDown() throws Exception {
            selenium.stop();
    }

}


public class GoogleHomePage {

    private final Selenium selenium;

    public GoogleHomePage(Selenium selenium) {
            this.selenium = selenium;
            this.selenium.open("http://www.google.com/webhp?hl=en");
            if (!"Google".equals(selenium.getTitle())) {
                    throw new IllegalStateException("Not the Google Home Page");
            }
    }

    public GoogleSearchResults searchFor(String string) {
            selenium.type("q", string);
            selenium.click("btnG");
            selenium.waitForPageToLoad("5000");
            return new GoogleSearchResults(string, selenium);
    }
}

public class GoogleSearchResults {

    private final Selenium selenium;

    public GoogleSearchResults(String string, Selenium selenium) {
            this.selenium = selenium;
            if (!(string + " - Google Search").equals(selenium.getTitle())) {
                    throw new IllegalStateException(
                                    "This is not the Google Results Page");
            }
    }

    public String getResult(int i) {
            String nameXPath = "xpath=id('res')/div[1]/div[" + (i + 1) + "]/h2/a";
            return selenium.getText(nameXPath);
    }
}

도움이 되길 바랍니다

다른 팁

나는 ASP.Net 앱을 테스트하기 위해 Selenium Remote Control을 사용하고 있는데(당신도 목표로 삼을 것이라고 가정하고 있습니다) 훌륭하게 작동합니다.

Selenium을 사용해 본 적이 없다면 다음 중 일부를 시청하십시오. 스크린캐스트 Selenium IDE를 사용하기 위해.이것은 '셀레늄'이 어떻게 작동하는지에 대한 좋은 아이디어를 줄 것입니다.IDE는 기본적으로 빠른 기록 및 재생 테스트를 개발할 수 있게 해주는 Firefox 플러그인입니다.더 큰 테스트 스위트 또는 실제로 유지 관리 가능한 테스트를 작성하려면 Selenium Remote Control을 권장합니다.(이제 막 시작하는 단계라면 IDE가 훌륭합니다.)

셀레늄 리모콘 테스트를 실행하기 위해 선호하는 언어와 단위 테스트 프레임워크를 사용하여 웹 브라우저를 구동할 수 있습니다.C#/NUnit에 가장 익숙하다면 테스트를 그런 식으로 작성하고 원하는 모든 NUnit 기능을 사용할 수 있습니다.(예: Test-Driven.net 플러그인)또한 테스트는 고급 언어로 작성되므로 실제 테스트 메서드 코드를 훨씬 깔끔하게 만드는 데 사용할 수 있는 특정 테스트 클래스에서 상속하는 등의 작업을 수행할 수 있습니다.(또는 적어도 그것이 제가 테스트를 작성하는 방식입니다.이를 통해 테스트 메서드 줄 수를 합리적인 수준으로 유지하는 복잡한 시나리오를 테스트할 수 있습니다.)

분산 테스트를 언급하셨습니다.아쉽게도 사용할 수 있는 방법을 찾지 못했습니다. 셀레늄 그리드 NUnit을 이용한 프로젝트Selenium Grid를 사용하면 다양한 시스템과 브라우저 인스턴스에서 테스트 스위트를 실행할 수 있습니다.따라서 200개의 테스트 방법을 차례로(즉, 연속적으로) 실행하는 대신 단일 시스템 또는 여러 시스템에 따라 4개의 Grid 인스턴스(즉, 한 번에 4개의 서로 다른 브라우저 인스턴스에서 실행)에 로드를 분산시킬 수 있습니다. 당신이 얻고 싶은 배포 방법에 대해.

하지만 Java나 PHP로 테스트를 작성한다면 운이 더 좋을 수도 있습니다.병렬 테스트를 위한 pNUnit이 포함된 NUnit2.5 릴리스와 함께 NUnit을 통해 이 기능을 사용할 수 있을 것으로 기대합니다.

셀레늄에 대해 추가 질문이 있는 경우 원래 질문을 명확하게 설명하면 기꺼이 도와드리겠습니다.(Selenium은 제가 매일 사용하는 도구 중 하나이므로 새로운 사람들이 Selenium을 시작할 수 있도록 돕는 것이 즐겁습니다.)

저는 Selenium IDE와 Selenium Core로 시작했습니다.이는 시작하는 데 확실히 좋은 도구입니다.그러나 Selenium의 HTML 기반 명령별 언어인 Selenese만 사용할 수 있기 때문에 그다지 강력하지는 않습니다.

이제 저는 Ruby 드라이버와 함께 Selenium Remote Control을 사용하여 Ruby가 제공하는 기능을 활용할 수 있습니다.나는 많은 환경을 테스트합니다.Windows 2000, XP, Vista, Mac 10.4/10.5 및 해당하는 각각의 경우 Safari 2/3, Firefox 2/3, Internet Explorer 6/7.

Selenium은 현재 Internet Explorer에 문제가 있지만 모든 OS 및 브라우저와 호환된다고 주장합니다(실제로 StackOverflow에 대한 첫 번째 질문은 이에 관한 것입니다).하지만 이렇게 강력하고 수많은 플랫폼에서 작동하는 다른 도구는 본 적이 없습니다.

Selenium에서 겪었던 가장 큰 문제는 DOM 구문 분석입니다.Safari/Firefox는 공백 및 주석 노드를 무시하지만 Internet Explorer는 그렇지 않기 때문에 JavaScript의 childNodes는 신뢰할 수 없습니다.Internet Explorer의 XPath는 SF/FF보다 10-20배 느립니다.innerHTML은 IE에서 항상 신뢰할 수 있는 것은 아닙니다.

Selenium은 꽤 괜찮은 도구이지만 주의해야 할 몇 가지 사항이 있습니다.

  • Selenium IDE와 Selenium 코어는 100% 동일한 기능을 공유하지 않습니다.예를 들어 오른쪽 클릭은 IDE에서 지원되지만 현재 코어 릴리스에는 지원되지 않습니다.그러나 저장소의 최신 버전을 사용하면 문제가 해결됩니다.

  • ext js, gwt 등의 경우 자동으로 생성된(임의) ID 대신 표시 요소에 대한 적절한 ID가 있는지 확인하세요.

  • 테스트 케이스 유지.셀레늄 테스트와 좋은 커버리지에 많은 노력을 기울인 사례를 보았습니다.나중에 테스트를 만든 사람이 다른 작업으로 바쁘고 아무도 테스트를 건드리고 싶어하지 않았기 때문에 테스트가 실패하기 시작했습니다.그러나 이는 Selenium이 아니라 관리 문제였습니다.

나는 셀레늄의 열렬한 팬이다.하지만 미리 알아두면 좋은 주요 문제 중 하나는 Selenium IDE가 팝업 창에 많은 문제를 안고 있다는 것입니다.이러한 문제는 Selenium RC에서는 지속되지 않지만 개발에 약간의 골칫거리가 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top