@@ -1000,51 +1000,57 @@ public <P extends Page> P click(final boolean shiftKey, final boolean ctrlKey, f
10001000 mouseDown (shiftKey , ctrlKey , altKey , MouseEvent .BUTTON_LEFT );
10011001 }
10021002
1003- if (handleFocus ) {
1004- // give focus to current element (if possible) or only remove it from previous one
1005- DomElement elementToFocus = null ;
1006- if (this instanceof SubmittableElement
1007- || this instanceof HtmlAnchor
1008- && ATTRIBUTE_NOT_DEFINED != ((HtmlAnchor ) this ).getHrefAttribute ()
1009- || this instanceof HtmlArea
1010- && (ATTRIBUTE_NOT_DEFINED != ((HtmlArea ) this ).getHrefAttribute ()
1011- || getPage ().getWebClient ().getBrowserVersion ().hasFeature (JS_AREA_WITHOUT_HREF_FOCUSABLE ))
1012- || this instanceof HtmlElement && ((HtmlElement ) this ).getTabIndex () != null ) {
1013- elementToFocus = this ;
1014- }
1015- else if (this instanceof HtmlOption ) {
1016- elementToFocus = ((HtmlOption ) this ).getEnclosingSelect ();
1017- }
1003+ final JavaScriptEngine jsEngine = (JavaScriptEngine )page .getWebClient ().getJavaScriptEngine ();
1004+ jsEngine .holdPosponedActions ();
1005+ try {
1006+ if (handleFocus ) {
1007+ // give focus to current element (if possible) or only remove it from previous one
1008+ DomElement elementToFocus = null ;
1009+ if (this instanceof SubmittableElement
1010+ || this instanceof HtmlAnchor
1011+ && ATTRIBUTE_NOT_DEFINED != ((HtmlAnchor )this ).getHrefAttribute ()
1012+ || this instanceof HtmlArea
1013+ && (ATTRIBUTE_NOT_DEFINED != ((HtmlArea )this ).getHrefAttribute ()
1014+ || getPage ().getWebClient ().getBrowserVersion ().hasFeature (JS_AREA_WITHOUT_HREF_FOCUSABLE ))
1015+ || this instanceof HtmlElement && ((HtmlElement )this ).getTabIndex () != null ) {
1016+ elementToFocus = this ;
1017+ }
1018+ else if (this instanceof HtmlOption ) {
1019+ elementToFocus = ((HtmlOption )this ).getEnclosingSelect ();
1020+ }
10181021
1019- if (elementToFocus == null ) {
1020- ((HtmlPage ) page ).setFocusedElement (null );
1021- }
1022- else {
1023- elementToFocus .focus ();
1022+ if (elementToFocus == null ) {
1023+ ((HtmlPage )page ).setFocusedElement (null );
1024+ }
1025+ else {
1026+ elementToFocus .focus ();
1027+ }
10241028 }
1025- }
10261029
1027- if (triggerMouseEvents ) {
1028- mouseUp (shiftKey , ctrlKey , altKey , MouseEvent .BUTTON_LEFT );
1029- }
1030-
1031- MouseEvent event = null ;
1032- if (page .getWebClient ().isJavaScriptEnabled ()) {
1033- final BrowserVersion browser = page .getWebClient ().getBrowserVersion ();
1034- if (browser .hasFeature (EVENT_ONCLICK_USES_POINTEREVENT )) {
1035- event = new PointerEvent (getEventTargetElement (), MouseEvent .TYPE_CLICK , shiftKey ,
1036- ctrlKey , altKey , MouseEvent .BUTTON_LEFT , 1 );
1037- }
1038- else {
1039- event = new MouseEvent (getEventTargetElement (), MouseEvent .TYPE_CLICK , shiftKey ,
1040- ctrlKey , altKey , MouseEvent .BUTTON_LEFT , 1 );
1030+ if (triggerMouseEvents ) {
1031+ mouseUp (shiftKey , ctrlKey , altKey , MouseEvent .BUTTON_LEFT );
10411032 }
10421033
1043- if (disableProcessLabelAfterBubbling ) {
1044- event .disableProcessLabelAfterBubbling ();
1034+ MouseEvent event = null ;
1035+ if (page .getWebClient ().isJavaScriptEnabled ()) {
1036+ final BrowserVersion browser = page .getWebClient ().getBrowserVersion ();
1037+ if (browser .hasFeature (EVENT_ONCLICK_USES_POINTEREVENT )) {
1038+ event = new PointerEvent (getEventTargetElement (), MouseEvent .TYPE_CLICK , shiftKey ,
1039+ ctrlKey , altKey , MouseEvent .BUTTON_LEFT , 1 );
1040+ }
1041+ else {
1042+ event = new MouseEvent (getEventTargetElement (), MouseEvent .TYPE_CLICK , shiftKey ,
1043+ ctrlKey , altKey , MouseEvent .BUTTON_LEFT , 1 );
1044+ }
1045+
1046+ if (disableProcessLabelAfterBubbling ) {
1047+ event .disableProcessLabelAfterBubbling ();
1048+ }
10451049 }
1050+ return click (event , shiftKey , ctrlKey , altKey , ignoreVisibility );
1051+ } finally {
1052+ jsEngine .processPostponedActions ();
10461053 }
1047- return click (event , shiftKey , ctrlKey , altKey , ignoreVisibility );
10481054 }
10491055 }
10501056
0 commit comments