iOS - 实际设备 - appium滚动:需要滚动到特定元素并单击

时间:2016-05-27 04:18:44

标签: java ios automation appium

问题:使用iOS实现自动化使用Appium的实际设备,我正在尝试的是向下滚动到当前页面中不存在的特定元素并选择该元素./点击该元素。

到目前为止使用:

  • 使用了scrollTo(" text")和scrollToexact(" text") - 现在知道这是在java-client中被删除的。只想双重确认是真的吗?

    • 确实尝试使用下面的内容,但仍然没有运气

      MobileElement slider = driver         .findElement(MobileBy                 .IosUIAutomation(" .tableViews()[0]"                         +" .scrollToElementWithPredicate(\" name CONTAINS' Slider' \")")); 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 个答案:

答案 0 :(得分:0)

意识到这已经很老了,但却发现它正在寻找一个不同的问题,并认为我可以提供帮助。

我在这里做的是使用Appium“刷卡”。

首先,我得到了我的屏幕大小 - Dimension size = driver.manage()。window()。getSize();

然后,我向下滑动屏幕 - driver.swipe(size.width / 3,(int)(size.height * 0.8),size.width / 3,(int)(size.height * 0.8) - 200,300);

在滑动之后,我调用一个布尔方法来查找返回的元素 - return driver.findElement(Bylocator).isDisplayed();

我将此滑动操作/ isDisplayed检查包装在FluentWait中,但是具有某种超时条件的简单while循环以及isDisplayed检查也可以。

将元素刷到并找到后,只需单击一下即可完成您的请求。 (注意:我对iOS和Android使用此过程,因此它也适用于您的两个平台。)

TL; DR - 使用driver.swipe,检查元素是否显示。如果没有,请再次滑动并检查。在您选择的循环中换行,直到找到元素或循环超时命中。