2017-12-10 3 views
0

Ich versuche, meine Appium Tests auf echten iOS-Gerät ausführen. Ich kann jedoch nicht herausfinden, wie man zwischen den Tabs in Safari wechselt. Ich öffne eine Seite auf Safari mit Appium IOSDriver-Instanz. Ich klicke dann auf einen Link auf der Seite, der einen neuen Tab öffnet. Jetzt möchte ich diese Registerkarte schließen oder zumindest zurück zum ursprünglichen Fenster wechseln.Wechseln zwischen den Tabs auf iOS Safari mit Appium

Ich habe die folgenden Lösungen ausprobiert, aber keiner von ihnen zu helfen scheint:

  1. Führen Berührungsaktion die Registerkarten Schnittstelle zu öffnen, verwalten nicht die Registerkarten Option klicken.

    TouchAction ta = new TouchAction(driver); 
    int h=driver.manage().window().getSize().getHeight(); 
    int w=driver.manage().window().getSize().getWidth(); 
    ta.tap(h-50,w-50).perform(); 
    
  2. Versuchte Schalter wieder auf ursprünglichen Kontext, nicht helfen

    for (String contextName : contextNames) { 
        if(!contextName.equals(original)) { 
         WebViewContext = contextName; 
         ((AppiumDriver) driver).context(WebViewContext); 
         Thread.sleep(4000); 
         driver.close(); 
        } 
    } 
    
  3. Javascript versucht, keinen Erfolg

    Set<String> windows = driver.getWindowHandles(); 
    String currentHandle = driver.getWindowHandle(); 
    ((JavascriptExecutor)driver).executeScript("window.open();"); 
    Set<String> newWindow = driver.getWindowHandles(); 
    newWindow.removeAll(windows); 
    driver.switchTo().window(original); 
    

Antwort

0

ich die folgenden Art und Weise versucht haben, und es funktioniert für mich:

IOSDriver driver = new IOSDriver(); 
    driver.get("url to be opened"); 
    WebElement ele = driver.findElement(By.xpath("xpathOfElementToBeclicked")); 

    ele.click(); //New window opens 

    Set<String> contextView = ((AppiumDriver)driver).getContextHandles(); 
    ArrayList<String> s = new ArrayList<String>(contextView);   
    ((AppiumDriver)driver).context(s.get(contextView.size()-1)); 
    driver.close(); 

Probieren Sie es aus. Hoffe, das hilft

+0

Aus irgendeinem Grund funktioniert das gleiche Skript nicht für mich zuvor, beachten Sie Code-Snippet (2) in meiner Frage. Ich habe es jedoch noch einmal versucht, nachdem ich deine Antwort mit einigen Wartezeiten/Schlaf gelesen habe, und es scheint den Trick zu machen. Vielen Dank – BountyHunter

Verwandte Themen