【问题标题】:When testing smartmenus in Selenium, submenus do not get exposed on hover over在 Selenium 中测试 smartmenus 时,子菜单不会在悬停时暴露
【发布时间】:2025-11-25 20:55:03
【问题描述】:

标准 Selenium 鼠标悬停/悬停机制不起作用

Actions builder = new Actions(driver);                 
builder.click(actionsButton).moveToElement(addNewLink).build().perform();

但是,点击操作意外起作用:

Actions builder = new Actions(driver);  
builder.click(actionsButton).click(addNewLink).build().perform();

这与用户浏览菜单时发生的情况完全相反 - 它们在悬停时显示出来并在点击时关闭。

【问题讨论】:

    标签: selenium mouseover


    【解决方案1】:

    原来罪魁祸首是Smartmenus。它有一个非标准代码,使用没有鼠标来检测移动设备。当检测到移动设备时,Smartmenus 会停止识别悬停,而是开始响应点击/点击。

    无论 Selenium 做什么来模拟鼠标移动,都不能让 Smartmenus 相信真正的鼠标存在。

    在用户在运行 Selenium 测试的计算机上移动鼠标的情况下,切换到单击而不是悬停也不能可靠地工作。

    我已经解决了一个尝试点击的解决方法,如果不成功,切换到悬停:

        Actions builder = new Actions(driver);
        builder.click(actionsButton).click(addNewLink).build().perform();
        try {
            wait.until(ExpectedConditions.visibilityOf(pcLink));
        }
        catch (TimeoutException e) {
            builder.click(actionsButton).moveToElement(addNewLink).build().perform();
            wait.until(ExpectedConditions.visibilityOf(pcLink));
        }
        pcLink.click();
    

    【讨论】:

    • 也许改变 selenium 的用户代理就可以了。
    最近更新 更多