在 selenium/nide 中为 IE 在 java 中处理右键单击

handle right click in selenium/nide for IE in java

我试图在打开自定义菜单时右键单击特定元素,但 IE 不执行右键单击。 (它与 firefox 一起工作)也为 IE 禁用了本机事件

(使用硒化物:elem.contextClick();

我假设我做错了什么或者动作被破坏了,在那种情况下我需要绕过它并且我试图调用一些 js 代码: executeJavaScript("document.querySelector('cssSelector').???()");

在我的例子中,这是在 firefox html 检查器中看到的与此元素关联的事件(无法显示代码,对此感到抱歉)

恢复:

如何右键单击 selenium/nide 中的特定元素,如果它坏了,我如何用 js 调用该事件

首先,在您的代码中实例化一个 Actions class:

Actions actions = new Actions(driver);

示例代码右键单击。

 WebElement btnElement = driver.findElement(By.id("rightClickBtn"));
 actions.contextClick(btnElement).perform();

根据这篇文章,oncontextmenu 属性 似乎支持 IE 浏览器,但是 contextmenu 属性只在 Firefox 中有效。

how do i right click on a specific element in selenium/nide and if it is broken, how do i call the event with js

请参考以下代码,使用mousedown事件处理left/right点击事件,然后使用按钮点击事件或直接创建事件调用mouseDown函数。

<script type="text/javascript">
    function mouseDown(e) {
        event.preventDefault();
        e = e || window.event;
        switch (e.which) {
            case 1: leftClick(); break;
            case 2: middleClick(); break;
            case 3: rightClick(); break;
        }
    }

    function leftClick() {
        alert("left click event");
    }
     function middleClick() {
        alert("middle click event");
    }
     function rightClick() {
        alert("right click event");
    }

    function triggerClick(e) {
        //trigger the right click event.
        var event = document.createEvent("Event");
        event.which = 3;
        mouseDown(event);
    }
</script>


<body oncontextmenu="return false;">
    <a id="btnSubmit" href="#" onmousedown="mouseDown(event);">Click Here</a> <br />
    <input type="button" id="btnTriggger" value="Trigger Button" onclick="triggerClick(event);" />
</body>

[评论]正文的oncontextmenu属性用于防止浏览器contextmenu。

截图如下:

在使用selenium webdriver的时候,在网站上可以添加一个隐藏按钮,使用上面的代码从隐藏按钮点击事件中触发右键事件,然后从webdriver中找到隐藏按钮后,可以调用click方法触发右键事件

此外,您还可以使用JavascriptExecutor通过Selenium Webdriver执行JavaScript。

好吧,不好意思,我的问题比这更严重,但我找到了解决方案:

出于其他原因,我不得不使用自定义 jquery 事件,所以看起来是这样的

cmd="$(cssselector).trigger(jQuery.Event('mousedown',{button:2}))"
executeJavaScript(cmd);

如果不需要自定义事件(也就是当您正在测试的页面制作精良时 -_-)

cmd="$(cssselector).trigger('mousedown')"
executeJavaScript(cmd);