gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:26 25 4
gpt4 key购买 nike

问题:使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com