iOS-фактическое устройство-Appium scroll: необходимо прокрутить к определенному элементу и нажать

Проблема: автоматизация с iOS фактического устройства с помощью Appium, все, что я пытаюсь прокрутить вниз к конкретному элементу, который не находится на текущей странице и выберите этот элемент./ нажмите на этот элемент.

Используется до сих пор:

  • используется scrollTo («text») и scrollToexact («text») — стало известно, что в java-клиенте это уже не актуально . Просто хотите дважды подтвердить, что это правда?

    • пытался использовать ниже,но все равно не повезло

      MobileElement slider = драйвер
      .findElement (MobileBy
      .IosUIAutomation(«.tableViews () [0]»
      + «.scrolltoelementwithпредиката («имя содержит ‘слайдер'»)»));
      assertEquals (slider.getAttribute («name»), » Sliders»);

Было бы полезно, если бы кто-то мог помочь мне решить эту проблему, также хотел бы сделать свиток для android позже, а также, еще не пробовал его.

Ниже приведен код, где я использовал различные методы, но до сих пор нет успеха, код запускается запускает приложение,но не прокручивает и выбрать какой-либо элемент:

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

   }

       }

1 ответ

  1. Понимаю, что это старый, но наткнулся на него в поисках другой проблемы и думал, что я мог бы помочь.

    То, что я делаю здесь, это использовать Appium «swipe».

    Во-первых, я получаю размер моего экрана-
    Размер размера = драйвер.руководить.)(окно.)(getSize();

    Затем я провожу пальцем по экрану вниз-
    водитель.размах (размер.width / 3, (int) (size.высота * 0.8), размер.width / 3, (int) (size.высота * 0.8) — 200, 300);

    После прокрутки я вызываю логический метод для поиска элемента, который возвращает-
    вернуть водителя.findElement (Bylocator).isDisplayed();

    У меня есть это действие салфетки/isDisplayed проверка, завернутая в FluentWait, но простой цикл while с каким-то условием тайм-аута и isdisplayed проверка будет работать тоже.

    После того, как элемент был перемещен и Найден, простой вызов щелчка завершит ваш запрос.
    (Примечание: Я использую этот процесс для iOS и Android, поэтому он должен работать на обеих платформах для вас.)

    TL; DR — использовать драйвер.проведите пальцем, проверьте, отображается ли элемент. Если нет, проведите пальцем по экрану и проверьте еще раз. wrap in loop of your choice until element is found or loop timeout hits.