Appium - 我们啥时候使用触摸动作?我可以有实际的例子来输入文本吗?
Posted
技术标签:
【中文标题】Appium - 我们啥时候使用触摸动作?我可以有实际的例子来输入文本吗?【英文标题】:Appium - When do we use touch action? Could I have actual example for inputing text with it?Appium - 我们什么时候使用触摸动作?我可以有实际的例子来输入文本吗? 【发布时间】:2017-07-06 10:01:34 【问题描述】:我想问一下我们什么时候在 Appium 中使用触摸动作。我还想问:我们可以使用触摸动作来点击/按下 android.widget.EditText 元素并将其发送到它。我可以有一个可行的例子来测试它吗?
【问题讨论】:
下面的解决方案有效吗? 不完全是。我可以找到一个要单击的按钮,但是有其他问题,我无法将键发送到文本字段:***.com/questions/42271992/… 我可以获取键盘,但我无法发送键,因为这些元素永远不会被单击。 你可以在下面的答案中使用最后两行代码吗?那应该可以解决您的问题。不要将密钥直接发送到元素。只需单击它,然后使用 driver.getKeyboard().sendKeys("textToBeTyped"); 有一个元素点击,但不是在我选择的元素上。经过所有测试,我发现它直接点击使用驱动程序,而不是通过xpath 驱动程序仅使用 xpath 找到元素,然后单击。 【参考方案1】:每当我们想要点击/轻敲设备上的特定元素时,我们都会使用触摸操作。
点击
您可以对 EditText 元素使用触摸操作,如下所示:
driver.findElement(By.xpath("your element xpath/id")).click();
用于打字
此外,您可以将 sendKeys 用于 EditText 元素,如下所示: 此内部单击元素,清除文本并键入您要发送的字符串。
driver.findElement(By.xpath("your element xpath/id")).sendKeys("textToBeTyped");
或
您可以单独单击和发送键,而无需清除文本元素内的现有文本,如下所示:
driver.findElement(By.xpath("your element xpath/id")).click();
driver.getKeyboard().sendKeys(textToBeTyped);
【讨论】:
【参考方案2】:1.public void tap(int fingers, int x, int y, int duration)
appiumDriver.tap(fingers, x, y, duration);
2. public void swipe(int startx, int starty, int endx,int endy,int duration)
TouchAction touchAction = new TouchAction(appiumDriver);
System.out.println(startx+" "+starty);
System.out.println("Entering swipe");
System.out.println("Swipe from "+startx +" " +starty +"to" +endx +" " +endy );
touchAction.press(startx, starty).waitAction(duration).moveTo(endx,endy).release().perform();
3. public void longClick(String element, int index, int clickCount, int X, int Y)
WebElement webElement = appiumDriver.findElement(By.xpath(element));
TouchAction Action = new TouchAction(appiumDriver);
Action.longPress(webElement).release().perform();
4. public void drag( String element, int index, int xOffset, int yOffset)
WebElement webElement = appiumDriver.findElement(By.xpath(element));
TouchAction drag=new TouchAction(appiumDriver);
int startX=webElement.getLocation().getX();
int startY=webElement.getLocation().getY();
System.out.println("startX: "+startX+" startY: "+startY);
drag.press(startX,startY).moveTo(xOffset,yOffset).release().perform();
try
Thread.sleep(5000);
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
【参考方案3】:在所有的 appium 客户端库中,都会创建触摸对象并赋予一系列事件。首先,您必须使用 webdriver 初始化 TouchAction ovbject,然后链接您的步骤以执行操作。您可以演示各种手势,例如:
点按 按(长、短) 滑动(从坐标 a 到 b) 执行多点触控操作您可以使用给定的参数来执行此操作,例如每次操作的持续时间、等待设置、设置释放等等。
示例:
为了按下带有坐标的元素:
new TouchAction(driverObject).tap(PointOption.point(x,y)).perform();
或:
new TouchAction(driverObject).press(PointOption.point(x,y)).perform();
为了将元素从 A 点滑动到 B 点,Z 持续时间为毫秒
//wait parameters for duration purposes
WaitOptions waitOptions = new WaitOptions();
waitOptions.withDuration(Duration.ofMillis(millis));
//The action
new TouchAction(driverObject).longPress.press(fromPoint)
.waitAction(waitOptions).moveTo(toPoint).release().perform();
【讨论】:
以上是关于Appium - 我们啥时候使用触摸动作?我可以有实际的例子来输入文本吗?的主要内容,如果未能解决你的问题,请参考以下文章