Android WebView GetHitTestResult()在模拟鼠标单击时显示上一个节点
我需要在Android WebView中模拟单击HTML页面中的节点,然后记录单击了哪个节点。但是,当我在子类WebView中从Android WebView GetHitTestResult()在模拟鼠标单击时显示上一个节点,android,xamarin.android,android-webview,motionevent,Android,Xamarin.android,Android Webview,Motionevent,我需要在Android WebView中模拟单击HTML页面中的节点,然后记录单击了哪个节点。但是,当我在子类WebView中从OnTouchEvent调用GetHitTestResult时,它显示的不是刚刚单击的节点,而是刚刚单击之前单击的节点。(即:首先选择一个编辑节点,然后假点击Image1.png,OnTouchEvent中的GetHitTestResult显示原始编辑节点,而不是“Image1”。如果你点击Image2.png,GetHitTestResult显示“Image1”。然后
OnTouchEvent
调用GetHitTestResult
时,它显示的不是刚刚单击的节点,而是刚刚单击之前单击的节点。(即:首先选择一个编辑节点,然后假点击Image1.png,OnTouchEvent
中的GetHitTestResult
显示原始编辑节点,而不是“Image1”。如果你点击Image2.png,GetHitTestResult
显示“Image1”。然后点击其他内容,它显示“Image2”。)
实际的鼠标点击显示了正确的节点——正是通过我模拟的点击,GetHitTestResult
显示了错误的节点。(在实际单击鼠标时,“向下”事件显示上一个节点,而“向上”事件显示当前/正确的节点。)不幸的是,我无法控制大多数网页,因此只能从日志代码中检测节点
我是否需要在模拟的“向下”点击和模拟的“向上”点击之间调用一些东西,以便Android/Xamarin/WebView小部件识别节点更改?(顺便说一句:这是在Xamarin.Android中的。)或者在Android中有没有办法强制它处理任何未完成的DispatchTouchEvent
事件,这些事件可能仍然在UI线程中挂起?(可能问题是由于在假“向下”点击和假“向上”点击之间未处理的内容造成的?)
C#点击代码:
void ClickThePage(WebView webView, float left, float top) {
long downTime = Android.OS.SystemClock.UptimeMillis();
long eventTime = Android.OS.SystemClock.UptimeMillis() + 100;
MotionEvent motionEventDown = MotionEvent.Obtain(
downTime, eventTime, MotionEventActions.Down,
left, top, (MetaKeyStates)0x0
);
downTime = Android.OS.SystemClock.UptimeMillis() + 200;
eventTime = Android.OS.SystemClock.UptimeMillis() + 300;
MotionEvent motionEventUp = MotionEvent.Obtain(
downTime, eventTime, MotionEventActions.Down,
left, top, (MetaKeyStates)0x0
);
// actually do the "Click"
webView.DispatchTouchEvent (motionEventDown);
System.Threading.Thread.Sleep (50);
webView.DispatchTouchEvent (motionEventUp);
motionEventDown.Recycle ();
motionEventUp.Recycle ();
}
单击捕获代码:
public class SAWebView : WebView {
...
public override bool OnTouchEvent (MotionEvent e) {
Console.WriteLine("[SAWebView]: OnTouchEvent: Action = " + e.Action +
"\n HitTestResult.Type = " + GetHitTestResult().Type +
"\n HitTestResult.Extra = " + GetHitTestResult().Extra);
return base.OnTouchEvent (e);
}
}
有什么解决办法吗?我现在被山姆的问题困扰着