홈>
두 개의 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
- 답변 # 2
와이즈 비즈 때문에 클래스에서 드라이버 객체를 선언하면 두 번째 테스트에서 launchBrowser ()를 호출하면 병렬 실행이 재정의됩니다.
명백히static
를 제거 이 문제를 해결하지만 테스트 베드와 방법이 증가하는 동안 드라이버 관리의 다른 문제에 빠지게됩니다.이러한 요구 사항을 처리하는 TestNG 확장을 사용하는 것이 좋습니다. 우리는 TestNG를 기반으로하는 QAF를 사용하고 있으며 드라이버 관리, 리소스 관리 및 웹/모바일/웹 서비스 테스트에 중요한 더 많은 기능을 제공합니다.
static
관련 자료
- powershell - ForEach-Object -Parallel 실행, 내보내기에서 누락 된 데이터
- Docker 컨테이너에서 Firefox를 실행할 때 Selenium 웹 드라이버에서 연결 거부 오류
- javascript - 셀레늄 서버가 작동 중이지만 셀레늄에 연결하지 못함
- protractor - 셀레늄 테스트 실행의 맥락에서 크롬 대 크롬 브라우저
- Powershell의 Clickhouse Docker Container에 병렬로드 실행
- 특정 가능한 작업을 병렬로 실행
- 루프에서 요청을 병렬로 실행하는 중 오류가 발생하고 완료 후 모든 요청을 가져오고 nodejs에서 코드의 다른 부분을 실행하십시오
- 장기 실행 함수에 대한 Python 단위 테스트
- selenium - 병렬 방법이 예상대로 실행되지 않습니다
- python - doctesting을 사용하여 클래스 내부에서 정의 된 메소드 단위 테스트
- c# - Azure IoTEdge의 모듈에서 장기 실행 메서드를 시작하는 가장 좋은 방법은 무엇입니까?
- Eclipse에서 TestNG로 Selenium 테스트를 실행해도 Chrome 브라우저가 시작되지 않습니다
- python - 셀렌 - ie가 헤드리스로 실행되지 않음
- java - 병렬 자동화 테스트 및 스레드 안전 변수
- maven - Docker 컨테이너에서 Selenium을 실행하는 Spring Boot 앱
- c# - 비동기/대기, 작업 병렬 디버깅하는 동안 FINE을 실행하는 복잡한 프로세스의 경우없이 실행하지 못했습니다
- java - 테스트 시나리오에서 아무것도 변경되지 않는 void 메소드 테스트
- java - Cucable 플러그인이 시나리오를 병렬로 실행하지 않음
- maven - Thorntail은 통합 테스트를 위해 실행되지 않지만 작업 프로젝트와 동일한 pomxml이 있습니다
- python 셀레늄 - staleelementreferenceexception으로 실행
관련 질문
- Selenium-Java Webdriver 테스트 프로젝트에서 Java 클래스의 실행 순서를 지정하는 방법
- java : WebDriverException : VM에서 테스트를 실행할 때마다 크롬에 연결할 수 없음
- java : Android-병렬로 여러 작업 실행
- java : 저장소 레지스트리 초기화 중에 Eclipse 오류가 발생했습니다.
- java : 자바를 사용하여 셀레늄 웹 드라이버에서 로그 파일 기록을 만드는 방법
- java : jar 파일에서 Selenium 테스트를 실행할 수 없습니다.
- java : 반복을 위해 Selenium WebElement를 문자열로
- Java Webdriver '아래쪽 화살표'작업이 작동하도록하기
- java : 명시 적 대기를 사용하여 부모 프레임 또는 기본 콘텐츠를 기다립니다.
- java : 모든 멤버를 인스턴스화 한 후 배열을 열거 할 때 NullPointerException이 발생합니까?
문제는 테스트 코드에 있습니다. WebDriver 객체가 정적 객체로 선언되고 있습니다.
따라서 모든 테스트 메소드가 동일한 인스턴스를 공유하게됩니다.문제를 해결하려면
static
를 제거하십시오Methods
에서 WebDriver 선언의 키워드 수업을 다시 시작하십시오.