【问题标题】:handle right click in selenium/nide for IE in java在 Java 中处理 IE 的 selenium/nide 中的右键单击
【发布时间】:2020-02-20 17:12:03
【问题描述】:

我试图在打开自定义菜单时右键单击特定元素,事情是,IE 不执行右键单击。 (它与 firefox 一起使用)也为 IE 禁用了原生事件

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

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

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

继续:

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

【问题讨论】:

    标签: javascript java internet-explorer selenium-webdriver selenide


    【解决方案1】:

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

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

    请参考以下代码,使用mousedown事件处理左/右键点击事件,然后使用按钮点击事件或直接创建事件调用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>
    

    [评论]body的oncontextmenu属性用于阻止浏览器上下文菜单。

    截图如下:

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

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

    【讨论】:

    • 感谢您的回答!一旦我测试过,我会回复你的:)
    • 不幸的是,这不起作用,但我已经编辑了我的问题以添加我的最新发现,您还有其他想法吗?
    【解决方案2】:

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

    Actions actions = new Actions(driver);
    

    示例代码右击。

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

    【讨论】:

    • 你的回答很有趣,但它真的是不同的方法还是只是相同的方法但以不同的方式调用?
    【解决方案3】:

    好吧,我的错,我的问题比这更深,但我找到了解决方案:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-20
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多