>

두 개의 Chrome 브라우저를 여는 Java 클래스가 있는데 각각 "test 1"과 "test 2"를 검색합니다. 그러나 두 브라우저가 모두 열리면 Google 페이지가있는 브라우저 하나만 "test 1 test 2"를 검색합니다.

이 문제는 부모 클래스에서 driver = new WebDriver를 호출하기 때문에 발생할 수 있다고 생각합니다. 그러나 문제를 해결하는 방법을 잘 모르겠습니다.

여기서 병렬로 실행하려는 두 가지 방법이 있습니다.

package webDrivertests;
public class googleTestClass extends Methods{
    @Test
    public void test1() throws InterruptedException {
        googleTestClass object1;
        object1 = new googleTestClass();
        object1.launchBrowser();
        object1.goToURL("https://www.google.com");
        object1.enterValue("name","q","google test 1");
        driver.quit();
    }
    @Test
    public void test2() throws InterruptedException {
        googleTestClass object2;
        object2 = new googleTestClass();
        object2.launchBrowser();
        object2.goToURL("https://www.google.com");
        object2.enterValue("name","q","google test 2");
        driver.quit();
    }
}

이것은 내가 호출하는 데 사용하는 XML 파일입니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
  <test thread-count="2" name="Test" parallel="methods">
    <classes>
      <class name="webDrivertests.googleTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

드라이버가 포함 된 상위 메소드

package webDrivertests;
// import statements
public class Methods {
    public static WebDriver driver;
    public void launchBrowser() {
         System.setProperty("webdriver.chrome.driver","C:\\chromedriver_win32\\chromedriver.exe");
        System.setProperty("webdriver.chrome.args", "--disable-logging");
        System.setProperty("webdriver.chrome.silentOutput", "true");
        driver = new ChromeDriver();
    }
    public void goToURL(String url) {
        driver.get(url);
    }
        public void enterValue(String htmltype, String identifier, String value) throws InterruptedException {
        if (htmltype == "id") {
            WebElement element = driver.findElement(By.id(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }
        if (htmltype =="name") {
            WebElement element = driver.findElement(By.name(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }
        Thread.sleep(3000);
    }
}

현재 결과 : 두 개의 브라우저가 열리고 각각 google.com으로 이동합니다. 그러나 하나의 브라우저에서만 "test 1 test 2"를 검색합니다. 도움을 주셔서 감사합니다! 가능한 경우 부모 클래스 "Methods"를 사용하고 싶습니다. 다른 실제 테스트 사례에 사용중인 많은 메소드가 포함되어 있기 때문입니다.

미리 감사합니다.


  • 답변 # 1

    문제는 테스트 코드에 있습니다. WebDriver 객체가 정적 객체로 선언되고 있습니다.

    따라서 모든 테스트 메소드가 동일한 인스턴스를 공유하게됩니다.

    문제를 해결하려면 static 를 제거하십시오   Methods 에서 WebDriver 선언의 키워드  수업을 다시 시작하십시오.

  • 답변 # 2

    와이즈 비즈 때문에  클래스에서 드라이버 객체를 선언하면 두 번째 테스트에서 launchBrowser ()를 호출하면 병렬 실행이 재정의됩니다.

    명백히 static 를 제거  이 문제를 해결하지만 테스트 베드와 방법이 증가하는 동안 드라이버 관리의 다른 문제에 빠지게됩니다.

    이러한 요구 사항을 처리하는 TestNG 확장을 사용하는 것이 좋습니다. 우리는 TestNG를 기반으로하는 QAF를 사용하고 있으며 드라이버 관리, 리소스 관리 및 웹/모바일/웹 서비스 테스트에 중요한 더 많은 기능을 제공합니다.

    static

관련 자료

  • 이전 c# - SubjectOnError 발생
  • 다음 android - 내 앱에서 특정 휴대 전화 다운로드를 추적하려면 어떻게합니까?