java - iOS-实际设备-appium滚动: Need to scroll to a particular element and click

标签 java ios automation appium

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

到目前为止使用过:

  • 使用了scrollTo("text") 和scrollToexact("text") - 发现它现在在 java-client 中已被废弃。只是想再次确认这是真的吗?

    • 尝试过使用以下内容,但仍然没有成功

      MobileElement slider = 驱动程序 .findElement(MobileBy .IosUIAutomation(".tableViews()[0]" + ".scrollToElementWithPredicate(\"名称包含' 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();

   }

       }

最佳答案

意识到这已经过时了,但在寻找不同的问题时遇到了它,并认为我可以提供帮助。

我在这里所做的是使用 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);

滑动后,我调用 boolean 方法来查找返回的元素:

return driver.findElement(Bylocator).isDisplayed();

我将这个滑动操作/isDisplayed 检查封装在 FluentWait 中,但是带有某种超时条件的简单 while 循环和 isDisplayed 检查也可以工作。

在元素被滑动并找到后,一个简单的点击调用将完成您的请求。 (注意:我在 iOS 和 Android 上使用此过程,因此它也应该适用于您的两个平台。)

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

关于java - iOS-实际设备-appium滚动: Need to scroll to a particular element and click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37474776/

相关文章:

java.lang.NoClassDefFoundError ANT 构建

objective-c - iOS - @autoreleasepool 崩溃或解决方法的解决方案?

ios - UIcollectionview装饰 View VS补充 View

ios - Xcode 存档按钮已禁用

python - 无法使用 python 和 dogtail 自动执行远程程序,远程服务器中没有图形界面......

automation - Windows HPC Server 2008 R2 环境中的 Office 2010 服务器端自动化

java - 如何在无限循环中获得UDP连接?

java - 从 JPanel 附加到 Window 事件

automation - 无法使用 Automation Anywhere 在 "Run Task"路径中进行多重编辑

java - 为什么 Hibernate 模式验证无法验证模式