问题:使用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();
}
}
答案 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,检查元素是否显示。如果没有,请再次滑动并检查。在您选择的循环中换行,直到找到元素或循环超时命中。