2016-06-21 2 views
1

시나리오조치를 완료하고 내가 하나가 내 주요 발주 웹 사이트 및 다른 쿠폰 생성 사이트 두 개의 응용 프로그램을 webdriver

셀레늄에 다른 브라우저에서 계속 하나의 브라우저를 기다리는 중. 내 주문 배치 시나리오에서 완전히 새로운 사용자 에이전트 및 기타 설정으로 새 브라우저 창을 열고 쿠폰을 만들고 쿠폰 값을 가져와 이전 창으로 돌아와 쿠폰을 적용해야합니다.

샘플 코드 :

WebDriver driver2 = new FirefoxDriver(); 
driver2.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
driver2.get("URL"); 
driver.get(URL); 
System.out.println(URL); 
+0

시나리오를 모르지만 스크립트 1을 시작하기 전에 쿠폰을 만들어 값을 저장할 수 있습니까? 그런 다음 적절한 시간에 쿠폰 값을 삽입하십시오. – JeffC

답변

0

내가 제대로 이해하면 두 번째는 쿠폰 코드를 받고 완료 될 때까지, 당신의 문제는 첫째 webdriver 대기를하고 있었다.

제 생각에는 스레드를 사용하고 첫 번째 스레드가 두 번째 스레드가 끝날 때까지 기다리는 것이 좋습니다.

여기에 Thread 클래스가 있습니다. 그 방법은 run() 방법에 해당됩니다.

class ThreadDemo extends Thread { 
    private Thread t; 
    private String threadName; 
    private String coupon; 
    ThreadDemo(String name){ 
     threadName = name; 
     System.out.println("Creating " + threadName); 
    } 
    public void run() { 
     WebDriver driver2 = new FirefoxDriver(); 
     //Operations on website 
     coupon="Something"; 

    } 
    public String getCoupon(){ 
     if (coupon==null){ 
      return ""; 
     }else{ 
      return coupon; 
     } 
    } 

    public void start(){ 
     System.out.println("Starting " + threadName); 
     if (t == null){ 
      t = new Thread (this, threadName); 
      t.start(); 
     } 
    } 

} 

이제 그냥 전화 : 그것은 밖으로 어떻게 작동하는지

ThreadDemo T1 = new ThreadDemo("Coupon-code"); 
T1.start(); 
String coupon = ""; 
while(coupon.equals("")) //<-This can be tweaked in 
          //order to consume less memory and be faster 
    coupon=T1.getCoupon(); 

이 말해!

+0

스레딩은 두 스크립트가 병렬로 실행되도록하여 진행 상황을 서로 추적하기가 더 어려워 질 것입니다. 이 상황에서 스레딩이 도움이되는 이유는 무엇입니까? – JeffC

+0

@JeffC 내가 OP가 원하는 바를 정확히 알기 때문에 그것들을 병렬로 실행하고 다른 쪽이 닫히면 OP를 계속 진행한다. 예를 들어 2 명의 사용자가 서로 다른 브라우저에서 상호 작용하기를 원하는 경우 스레딩이 매우 유용합니다. –

+0

Parralell 실행이 항상 도움이되지 않습니다. 주문 이행 (driver1) 전에 쿠폰 생성 (드라이버 2)을 완료해야하기 때문에. 그리고 나는 실행 순서를 유지할 필요가있다 – SurajSr

0

죄송합니다. 휴대 전화를 입력하고 있으므로 API를 다시 확인해야 할 수도 있습니다.

당신은 쇼핑 드라이버가

0

@Rafael 알메이다 네 대답에 노력 쿠폰 값을 사용하고 일하는 계속 //

String coupon = couponDriver.until(ExpectedConditions.presenceOfElementLocated(By.id("couponId")).getText(); // or getValue() depend on element type 

를 사용할 수 있습니다. 그러나 나중에 동일한 드라이버 인스턴스를 사용하여 구현을 변경했습니다. 따라서 하나의 스레드가 필요하지 않습니다. 어떤 식 으로든이 스레딩은 더 흥미로 웠습니다.

관련 문제