尝试在不支持tap()
事件的网站上仅执行onclick
的{{1}}操作。
一个网站示例如下:
https://www.w3schools.com/Jsref/tryit.asp?filename=tryjsref_touchstart
touch
方法在Android设备上可以很好地工作,但在iOS Safari上却不做任何事情(不确定Chrome或其他浏览器,因为BrowserStack除Safari之外不支持其他任何功能)。
我也曾在Selenium repo上提出过一个问题,但是还没有解决,所以在这里询问是否其他人以前遇到过这个问题并能够找到解决方法。
Appium touch似乎仅在本机环境中有效,但在移动Web浏览器上无法使用。
上面的网站示例中使用的代码示例:
SingleTap()
测试:
//Driver wrapper
public class CnxDriver : RemoteWebDriver, IHasTouchScreen
{
private ITouchScreen m_touchScreen;
public CnxDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
: base(commandExecutor, desiredCapabilities)
{
}
public CnxDriver(ICapabilities desiredCapabilities)
: base(desiredCapabilities)
{
}
public CnxDriver(Uri remoteAddress, ICapabilities desiredCapabilities)
: base(remoteAddress, desiredCapabilities)
{
}
public CnxDriver(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout)
: base(remoteAddress, desiredCapabilities, commandTimeout)
{
}
public ITouchScreen TouchScreen => m_touchScreen ?? (m_touchScreen = new RemoteTouchScreen(this));
private static object Invoke(object o, string methodName, params object[] args)
{
var methodInfo = o.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
if (methodInfo != null)
{
return methodInfo.Invoke(o, args);
}
return null;
}
public IWebElement FindByXName(string locator)
{
return Invoke(this, "FindElement", "xname", locator) as IWebElement;
}
public static IWebElement FindByXName(IWebElement root, string locator)
{
var parentElement = root as RemoteWebElement;
return Invoke(parentElement, "FindElement", "xname", locator) as IWebElement;
}
}