2016-05-27 2 views
0

Problem: Automatisierung mit iOS Tatsächliche Gerät mit Appium, alles was ich versuche ist bis zu einem bestimmten Element, das nicht in der aktuellen Seite und wähle das Element aus./klicke auf dieses Element.iOS - Tatsächliches Gerät - Appium Scroll: Muss zu einem bestimmten Element scrollen und klicken Sie

bisher benutzt:

  • scrollTo ("text") und scrollToexact ("text") verwendet - kam zu wissen, dass dies jetzt in Java-Client depricated wird. Ich möchte nur bestätigen, ist es wahr?

    • haben versucht, die unten zu verwenden, aber noch kein Glück

      MobileElement Schieber = Treiber .findElement (MobileBy .IosUIAutomation ("Tableviews() [0]" +“.scrollToElementWithPredicate ("Name CONTAINS 'Slider'"))); assertEquals (slider.getAttribute ("name"), "Sliders");

Es wäre hilfreich, wenn jemand mir dieses Problem lösen helfen könnte, würde auch gerne die Schriftrolle für Android tun, auch später, habe es noch nicht ausprobiert.

Sie den Code unten ist, wo ich verschiedene Techniken, aber immer noch keinen Erfolg verwendet haben, startet die Code läuft die App, funktioniert aber nicht bewegen und jedes Element auswählen:

import java.io.File; 

import java.net.URL; 

import java.util.HashMap; 

import java.util.concurrent.TimeUnit; 



import org.junit.AfterClass; 

import org.openqa.selenium.By; 

import org.openqa.selenium.JavascriptExecutor; 

import org.openqa.selenium.WebElement; 

import org.openqa.selenium.remote.CapabilityType; 

import org.openqa.selenium.remote.DesiredCapabilities; 



import io.appium.java_client.MobileBy; 

import io.appium.java_client.MobileElement; 

import io.appium.java_client.ios.IOSDriver; 

import io.appium.java_client.ios.IOSElement; 



import org.testng.annotations.BeforeClass; 

import org.testng.annotations.Test; 



public class testfour { 



public static IOSDriver driver; 


@BeforeClass 

public static void setUpBeforeClass() throws Exception { 



DesiredCapabilities capabilities = new DesiredCapabilities(); 

//capabilities.setCapability("noReset", true); 

capabilities.setCapability("platformName", "iOS"); 

capabilities.setCapability("deviceName","iPhone_6"); 

capabilities.setCapability("udid", "840384833537f40d011032eaaf20a53705a451ce"); 

capabilities.setCapability("BROWSER_NAME", "iOS"); 

capabilities.setCapability(CapabilityType.VERSION, "9.2.1"); 

capabilities.setCapability(CapabilityType.PLATFORM, "MAC"); 


capabilities.setCapability("autoAcceptAlerts", true); 

    capabilities.setCapability("autoAcceptAlerts", true); 


    driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 

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

    } 



    @Test 

    public void test() throws InterruptedException { 


    System.out.println("TEST STARTED"); 


    //Make 

    driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIAScrollView[1]/UIATableView[1]/UIATableCell[6]/UIAStaticText[1]").click(); 

    System.out.println("TEST STARTED6 MAKE"); 

    //Select Audi and model a8 

driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[8]/UIAStaticText[1]").click(); 

    System.out.println("TEST STARTED5 AUDI"); 

driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIAScrollView[1]/UIATableView[1]/UIATableCell[8]/UIAStaticText[2]").click(); 

    System.out.println("TEST STARTED4 MODEL"); 

//driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[17]/UIAStaticText[1]").click(); 

    System.out.println("TEST STARTED3"); 

    //String Str = "A8"; 

     System.out.println("TEST STARTED2"); 



    //MobileElement slider = (MobileElement) driver.findElement(MobileBy.IosUIAutomation(".tableViews()[2]"+ ".scrollToElementWithPredicate(\"name CONTAINS 'Slider'\")")); 

    MobileElement slider = (MobileElement) driver.findElement(MobileBy.IosUIAutomation("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[17]"+ ".scrollToElementWithPredicate(\"name CONTAINS 'A8'\")")); 

    System.out.println("TEST STARTED1"); 

    assertEquals(slider.getAttribute("A8"), "Sliders"); 

    System.out.println("TEST STARTED0"); 


    // MobileElement table = (MobileElement) driver.findElement(MobileBy.IosUIAutomation(".tableViews()[0]")); 

    // MobileElement slider = (MobileElement) table.findElement(MobileBy.IosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS 'Slider'\")")); 

// assertEquals(slider.getAttribute("name"), "Sliders"); 



    //driver.findElementByIosUIAutomation(".scrollToElementWithName(\""+ Str + "\")").click(); 

    //WebElement tableView = driver.findElementByIosUIAutomation(".tableViews() [2]"); 

    //((IOSElement) tableView).scrollTo("A8"); 

    //((IOSElement) tableView).scrollTo("A8").click(); 


    System.out.println("TEST STARTED1"); 


    //driver.execute("mobile: scroll", [{direction: 'down',  driver.findElementByXPath: ("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[17]/UIAStaticText[1]"}]); 

    //driver.scrollTo("A8").click(); 


    //JavascriptExecutor jes = (JavascriptExecutor) driver; 

    //HashMap<String, String> scrollObject = new HashMap<String, String>(); 

    //scrollObject.put("direction", "down"); 

    //scrollObject.put("element", (driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[17]/UIAStaticText[1]"))); 

    //jes.executeScript("mobile: scroll", scrollObject); 

    //jes.executeScript(arg0, arg1) 

    //driver.swipe(startx, starty, endx, endy, duration); 

    //driver.switchTo() 

    //jes.executeScript("arguments[0].scrollIntoView(true);", driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIATableView[2]/UIATableCell[17]/UIAStaticText[1]")); 


      //driver.findElementByXPath("//UIAApplication[1]/UIAWindow[1]/UIAButton[7]").click(); 

    // driver.scrollToExact(text) 

    // driver.scrollTo("//UIAApplication[1]/UIAWindow[1]/UIAButton[7]").click(); 



    //Select Model000 

    driver.findElement(By.linkText("All Models")).click();  

    driver.findElement(By.linkText("AVALON")).click(); 

    //Click on Search button 

    driver.findElement(By.id("search_btn")).click();  

    // Click on the Search Alert Bar 

    driver.findElement(By.id("switchButton")).click();    

    //ex: for content-desc //Click on the Back button and navigate to home page 

    driver.findElement(By.name("Navigate up")).click(); 

    //Now click on the Menu in the home page 

    driver.findElement(By.name("Navigate up")).click();   

    //Click on the Search Search under the menu item 

    driver.findElementByLinkText("Saved Searches").click();  

    //get the text 

    String text = driver.findElement(By.id("name_tv")).getText(); 

    System.out.println("Actual Text:"+text); 


    System.out.println("Test has been completed"); 

    } 



    private void assertEquals(String attribute, String string) { 

    // TODO Auto-generated method stub 


} 



    @AfterClass 

    public void tearDown() 

    { 

    driver.quit(); 

    } 

     } 
+0

Willkommen bei Stackoverflow. Bitte stellen Sie sicher, dass Ihre Frage wie hier beschrieben ausführlicher ist: http://stackoverflow.com/help/mcve. Sie erhalten schnellere und bessere Antworten auf vollständige Fragen. – tfv

+0

@All, Irgendwelche Vorschläge dazu? Immer noch mit diesem Thema festgefahren. Ich freue mich auf etwas Hilfe –

Antwort

0

Verwirklichen dieses alte, aber kam in es suchte nach einem anderen Problem und dachte, ich könnte helfen.

Was ich hier mache, ist Appium "Swipe".

Zuerst bekomme ich die Größe meines Bildschirms - Dimension size = driver.manage(). Window(). GetSize();

Dann wische ich den Bildschirm nach unten - driver.swipe (size.width/3, (int) (size.height * 0.8), size.width/3, (int) (size.height * 0.8) - 200, 300);

Nach dem Wischen, rufe ich eine boolesche Methode auf, um nach dem Element zu suchen, das zurückgibt: return driver.findElement (Bylocator) .isDisplayed();

Ich habe diese Swipe-Aktion/IsDisplayed Check in FluentWait eingewickelt, aber eine einfache While-Schleife mit einer Art von Timeout-Bedingung und die isDisplayed-Check würde auch funktionieren.

Nachdem das Element zu und gefunden wurde, wird ein einfacher Klick Ihre Anfrage vervollständigen. (Hinweis: Ich benutze diesen Prozess für iOS und Android, also sollte es auch auf beiden Plattformen funktionieren.)

TL; DR - driver.swipe verwenden, prüfen, ob Element angezeigt wird. Wenn nicht, streichen Sie und überprüfen Sie erneut. wrap in die Schleife Ihrer Wahl, bis das Element gefunden wurde oder die Schleife abgelaufen ist.

Verwandte Themen