如何单击使用硒在鼠标悬停时填充的Windows菜单 [英] how to Click on windows menu which populate on mouse hover using selenium

查看:49
本文介绍了如何单击使用硒在鼠标悬停时填充的Windows菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个JavaScript函数,可在运行时加载菜单.鼠标悬停时,LoadMenu函数将加载菜单项,并且在MouseClick()事件上需要与之关联的位置.

A JavaScript function which load menu at run time. On mouse hover over, the LoadMenu function loads the menu item and I need the location assosciated with it on MouseClick() event.

如何使用Selenium网络驱动程序来做到这一点?

How can I do this using Selenium webdriver?

function  LoadMenus(){

        window.menu_1234567 =  new Menu("root",150,20,"Arial, Helvetica, sans-serif",12,"#336699","#333333","#ffffff","#E2E6CD","left","middle",10,0,200,-5,7,true,false,true,0,true,true);
        menu_1234567.addMenuItem("Partner Management","location='/dash-1.0/partnerconfiguration/partnerAdministration.action'");
        menu_12345678_0.addMenuItem("User Management","location='/dash-1.0/systemadminconfiguration/userSysAdmin.action'");
        menu_1234567.addMenuItem("Audit Report","location='/dash-1.0/configuration/auditReport.action'");
        menu_1234567.addMenuItem("Change Password","location='/dash-1.0/changecurrentpassword.action'");
        menu_1234567.addMenuItem("Sign Out","location='/dash-1.0/logout.action'");
        menu_1234567.hideOnMouseOut=true;
        menu_1234567.writeMenus();
     };
    LoadMenus();                

这是HTML代码:

    <div id="menuItem0" class="menuItem" style="position: absolute; left: 0px; top: 0px; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 20px; background-color: rgb(255, 255, 255); visibility: inherit;">
<div id="menuItemText0" class="menuItemText" style="position:absolute;left:11px;top:3px;color:#336699;">Partner Management </div>
<div id="menuItemHilite0" class="menuItemHilite" style="position: absolute; left: 11px; top: 3px; color: rgb(51, 51, 51); visibility: hidden;">Partner Management </div>
</div>

我通过硒webdriver获得了元素"menuItemText2",但是在element.click()方法上什么也没有发生.我已经尝试了下面提到的所有方案,但是无法通过Selenium Web驱动程序正确单击菜单项.

I got the element "menuItemText2" via selenium webdriver but on element.click() method nothing happens. I have tried all those scenarios mentioned below, but unable to click on menu item correctly via selenium web driver.

// case 1 tried using mouseMove
Point p=element.getLocation();
System.out.println("x="+p.getX());
System.out.println("y="+p.getY());
Robot robot = new Robot();
robot.mouseMove(p.getX(),p.getY());

// case 2 tried using moveByOffset
Actions builder = new Actions(driver); 
builder.moveToElement(element).build().perform();
builder.moveByOffset(p.x, p.y).perform();

// case 3  tried using Action builder
Actions hover = builder.moveToElement(element, p.x, p.y);
hoverOverRegistrar.perform();
hover.perform();
hover.build();
hover.click();

//case 4 tried by executing javascript and search element by name
element=    driver.findElement(By.name("Sign Out "));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("$('div#menuItemText2').mouseover();");
js.executeScript("$('div#menuItem3.menuItem').click();");

// case 5 tried by executing javascript and search element by id
element = driver.findElement(By.id("menuItem4"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("$('div#menuItem4.menuItem').hover();");
element.click();

请说明如何单击这样的菜单项,这些菜单项会填充鼠标悬停,并且单击事件未与Web元素相关联.

Please explain how to click on such menu items which populate the on mouse hover and on click event is not assosciated with web element.

推荐答案

我将修改您描述的情况5:

I would modify case 5 you described:

// case 5 tried by executing javascript and search element by id
element = driver.findElement(By.id("menuItem4"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("$('div#menuItem4.menuItem').hover();");
element.click();

通过以下方式;

    String cssSelector="[id='menuItem4']";

    public void jsClick(String css){

        JavascriptExecutor js = (JavascriptExecutor) driver;
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("var x = $(\'"+css+"\');");
            stringBuilder.append("x.click();");
            js.executeScript(stringBuilder.toString());
    }
    jsClick(cssSelector);

希望这可以对您有所帮助)

hope this somehow helps you)

这篇关于如何单击使用硒在鼠标悬停时填充的Windows菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆