2016-06-21 25 views
1

SzenarioWarten auf einem Browser-Aktion abzuschließen und in einem anderen Browser in Selen WebDriver

Ich habe zwei Anwendungen ist meine Hauptauftrag Platzierung Website und andere Coupon Generation Website weiter. Zwischen meinem Order-Placement-Szenario muss ich ein neues Browser-Fenster mit einem völlig neuen User-Agent und anderen Einstellungen öffnen und einen Coupon erstellen, den Coupon-Wert auswählen und zum vorherigen Fenster zurückkehren und den Coupon anwenden.

Beispielcode:

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

Ich kenne Ihr Szenario nicht, aber können Sie den Gutschein erstellen und den Wert vor dem Starten von Skript 1 speichern? Legen Sie dann den Gutscheinwert zur richtigen Zeit ein. – JeffC

Antwort

0

Wenn ich richtig verstanden habe, Ihr Problem machte die erste webdriver warten, bis die zweite beendet ist den Gutschein-Code zu bekommen.

Dafür wäre mein Vorschlag Threads zu verwenden und die erste warten auf den zweiten zu beenden.

Hier ist Ihre Thread Klasse. Was es tun wird, fällt unter die run() Methode.

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(); 
     } 
    } 

} 

Jetzt ist es nur nennen:

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(); 

Sag mir, wie es funktioniert!

+0

Durch das Threading werden die beiden Skripte parallel ausgeführt, was es noch schwieriger macht, ihren Fortschritt relativ zueinander zu verfolgen. Warum würde Threading in dieser Situation helfen? – JeffC

+0

@ JeffC Wie ich verstehe, ist das genau was OP will, führen Sie sie parallel, und fahren Sie fort, wenn der andere schließt. Threading ist sehr nützlich, wenn Sie zum Beispiel 2 Benutzer von verschiedenen Browsern miteinander interagieren wollen –

+0

Nein Parrallall Ausführung wird nicht immer helfen. Weil ich die Coupongenerierung (Fahrer 2) vor dem Auftragsplatzierung (driver1) abschließen muss. Und ich muss die Reihenfolge der Ausführung beibehalten – SurajSr

0

Tut mir leid, ich tippe auf meinem Handy, also müssen Sie vielleicht die API überprüfen.

können Sie

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

verwenden // mit Einkauf fortsetzen Fahrer den Gutschein Wert

0

@Rafael Almeida Ja Ich habe versucht, mit der Antwort verwendet und es funktionierte. Später wurde jedoch die Implementierung mit der gleichen Treiberinstanz nacheinander geändert. Also kein Bedarf an einem Thread zu warten. Irgendwie war dieses Threading interessanter zu versuchen.