使用触控事件的Webdriver

3
我想在使用Java代码控制iOS iPad或Android平板时,利用Selenium WebDriver的触摸/轻按事件。如何实现这一功能?
2个回答

2
是的,您可以使用AndroidDriver在Android设备上测试Web应用程序/网站。
链接:Android WebDriver
对于iOS,有iPhone的WebDriver
链接:iPhone WebDriver
此外,请检查: WebDriver for Mobile Browsers
由于这些驱动程序是用于自动化测试Web视图/页面的,它们不具备原生应用程序自动化框架中的触摸/点击事件。
您应该尝试使用jQuery Mobile API在Web页面上执行触摸/点击事件。使用selenium webdriver的JavascriptExecutor并使用执行器执行jquery。
请查看:jQuery Mobile Tap

@user2000759:我建议你学习一些jQuery和JavaScript的基础知识,以了解它们的工作原理。是的,你可以在Java WebDriver中使用jQuery。一旦你理解了jQuery和JavaScript,可以查看以下链接: link1 link2 link3 - Abhijeet Vaikar
另外,如果我的回答对您有帮助,请考虑点击我回答旁边的左侧复选标记来接受它。 - Abhijeet Vaikar
谢谢Abhijeet:我今天尝试了。<Code> String javascriptToExecute = "window.jQuery(//document.elementFromPoint(" + getElementXPosition(elementToTap) + "," + getElementYPosition(elementToTap) + "))" + SINGLETAP; executeJavascript(javascriptToExecute); <Code>但是webdriver找不到元素,也没有抛出错误(只有超时错误)。你能检查一下吗? - user2025331

1

对于Android,TouchEvents是可用的。

这里有一个代码片段,可以在Google搜索结果页面上移动一个滑块,以查看旧金山的天气。我不能保证您会得到相同的搜索结果,因为这是由谷歌决定的 :) 但我希望这个例子足以让您开始。

此示例使用Junit 4测试运行程序,您可以调整代码以在Junit 3和其他测试运行程序中运行等等。

package org.example.androidtests;

import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.android.AndroidDriver;
import org.openqa.selenium.interactions.touch.TouchActions;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;

public class AndroidDemoTest {

    @Test 
    public void test() throws InterruptedException {
        AndroidDriver driver = new AndroidDriver();
        Wait<WebDriver> wait = new WebDriverWait(driver, 20);

        driver.get("http://www.google.co.uk");
        WebElement q = driver.findElement(By.name("q"));
        q.sendKeys("weather in san francisco");
        q.submit();

        WebElement slider = wait.until(visibilityOfElementLocated(By.className("wob_shi")));

        Point location = slider.getLocation();
        Dimension size = slider.getSize();

        // Find the center of this element where we we start the 'touch'
        int x = location.getX() + (size.getWidth() / 2);
        int y = location.getY() + (size.getHeight() / 2);

        new TouchActions(driver).down(x, y).move(150, 0).perform();

    }
}

注意:如果您想要在iOS和Android平台上都能够运行的测试,您需要采用另一种方法,也许可以使用JQuery Mobile,正如另一个回答中建议的那样。以下文章还介绍了如何使用JQuery模拟iOS的触摸事件http://seleniumgrid.wordpress.com/2012/06/01/how-to-simulate-touch-actions-using-webdriver-in-iphone-or-ipad/

driver = new IPhoneDriver("http://10.160.144.22:3001/wd/hub"); driver.get("URL") driver.findElement(By.name("username")).sendkeys("admin"); driver.findElement(By.name("password")).sendKeys("password"); WebElement Element = driver.finelement(By.name("Submit")); Action Tchact = new TouchActins(driver).singleTap(Element).build(); Tchact.perform();在上面的代码中:我可以使用Android设备执行相同的操作,但对于iPhone设备:我收到错误消息 <iPhone driver can not cast to HasTouchScreen>。 - user2025331
这会替换掉AndroidDriver driver = new AndroidDriver();的代码行吗?您能否在某处粘贴任何错误消息以帮助诊断问题? - JulianHarty
精确的错误信息是<java.lang.classCastException: org.openqa.selenium.iphone.IPhoneDriver无法转换为org.openqa.selenium.HasTouchScreen>。 - user2025331
好的,让我们检查一下我对您当前尝试的理解:您正在尝试运行我提供给AndroidDriver的示例代码,但是您已更改驱动程序以使用iPhoneDriver?如果是这样,那对您来说是行不通的。 iPhoneDriver不支持Touch Actions-这就是为什么Abhijeet和我都提到了JQuery替代方案的原因。 - JulianHarty
我也尝试了JQuery,但没有成功。 String javascriptToExecute = "return window.jQuery(//document.elementFromPoint("+ 500 + "," + 200 + "))" + SINGLETAP;其中singletap: private static String SINGLETAP = ".trigger(‘tap’);";System.out.println("javascriptToExecute:"+javascriptToExecute); - user2025331
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接