0

Ich arbeite an einem Selen-Skript, wo ich explizite Wartezeit verwende. Ich habe ein Skript, in dem ich drei Methoden zum Aufrufen von IE-, FireFox- und Chrome-Browsern verwende.Wie deklariert Explicit wait im TestNG-Framework wo Skript für mehrere Browser geschrieben wird?

Ich werde Skript für einen Browser gleichzeitig ausführen. Jetzt ist die Frage, wie ich das Warten (explizit) erklären sollte. Ich kann zwei folgende Optionen sehen. 1. Erstellen Sie ein Objekt der Klasse WebDriverWait Global --- In diesem Szenario löst der Webtreiber die Ausnahme aus, da für die Browserklasse (in diesem Fall FireFoxDriver()) kein Objekt erstellt wurde. 2. Erstellen Sie ein Objekt der WebDriverWait-Klasse lokal in einer beliebigen Methode. In diesem Szenario funktioniert wait perfekt, aber für den Fall, dass ich die Wartezeit für ein anderes Element erneut verwenden muss. Es würde Sie bitten, Objekt der WebDriverWait-Klasse wieder lokal zu erstellen (was etwas ist, was ich vermeiden möchte).

In Kürze. Ich möchte nur ein Objekt der WebDriverWait Klasse onle einmal im Code erstellen. Wie kann ich es für den unten genannten Code tun?

finden Sie den Code ..

public class para { WebDriver Treiber;

@BeforeClass 
void InvokeFF() { 
    System.setProperty("webdriver.gecko.driver", 
      "C:/Users/Vinay/workspace_n/EGuru/drivers/geckodriver.exe"); 
    driver = new FirefoxDriver(); 
    // driver.get("http://seleniumpractise.blogspot.in/2016/08/bootstrap-dropdown-example-for-selenium.html"); 
    System.out.println("Firefox invoked"); 
    System.out.println("Firefox thread:" + Thread.currentThread().getId()); 
} 

@BeforeClass(enabled = false) 
void InvokeIE() { 
    System.setProperty("webdriver.ie.driver", 
      "C:/Users/Vinay/workspace_n/EGuru/drivers/IEDriverServer.exe"); 
    driver = new InternetExplorerDriver(); 
    System.out.println("Internet Explorer invoked"); 
    System.out.println("IE thread:" + Thread.currentThread().getId()); 
} 

@BeforeClass(enabled = false) 
void InvokeGC() { 
    System.setProperty("webdriver.chrome.driver", 
      "C:/Users/Vinay/workspace_n/EGuru/drivers/chromedriver.exe"); 
    driver = new ChromeDriver(); 
    // driver.get("http://www.seleniumeasy.com"); 
    System.out.println("Chrome invoked"); 
    System.out.println("Chrome thread:" + Thread.currentThread().getId()); 

} 

@Test 
void Auto() throws Exception { 
    WebDriverWait wait = new WebDriverWait(driver, 20); 
    driver.get("file:///C:/Users/Vinay/Desktop/Upload1.html"); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By 
      .xpath(".//*[@id='1']"))); 
    driver.findElement(By.xpath(".//*[@id='1']")).click(); 
    Runtime.getRuntime().exec("C:\\Users\\Vinay\\Desktop\\AutoUpload.exe"); 
} 

}

Antwort

0

Ich denke, was Sie suchen eine implizite Wartezeit ist, nicht explizit warten. Dies kann unter unter Verwendung des Codezeile erreicht werden, nach dem Treiber erstellt wurde (mit je nachdem, welche Treiber sie braucht)

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

Offensichtlich die bis 10 Sekunden ändern, was auch immer Standard-Timeout Sie wollen.

+0

Implizite Wartezeit bewirkt, dass das Skript nach der Ausführung jeder Anweisung/Anweisung 10 Sekunden lang wartet. Es kann nur einmal im Skript deklariert werden. das würde mein Skript langsam machen. Ich möchte explizit warten, wo ich warten will, wann immer ich es brauche. – iAutomate

+1

Siehe http://toolsqa.com/selenium-webdriver/implicit-explicit-n-fluent-wait/ Eine implizite Wartezeit dauert keine Zeit, wenn eine Funktion erfolgreich ist. Sie legt nur eine Standardwartezeit für Wiederholungsversuche fest. Die explizite Wartezeit ist, wenn Sie eine längere Wartezeit benötigen als die standardmäßige (implizite) Wartezeit. Ansonsten funktionieren sie ziemlich ähnlich. –

Verwandte Themen