使用SeleniumBasic for vba无法选择隐藏的菜单项

时间:2019-08-08 14:40:28

标签: vba selenium-webdriver selenium-chromedriver

使用SeleniumBasic for vba在工作页面上选择隐藏菜单项时遇到麻烦。我试图使用WebDriver.Mouse.MouseTo将鼠标悬停在每个菜单选项上,以便可以选择嵌套在其下方的对象,但是在第一次悬停之后,找不到该对象。

在下面的图片中,我打算像这样导航:

Pricing Admin
    System Admin
        Multi-PAG Upload

picture

为此,我必须将鼠标悬停在定价管理员上,然后将鼠标悬停在系统管理员上,以便该菜单显示为单击 Multi-PAG Upload 强>。我已经成功地将驱动程序悬停在定价管理员上,该菜单弹出了第一个菜单列表,其中三个项目以 System Admin 结尾。但是,尝试FindElement()进行系统管理员以便于我可以将鼠标悬停在上面非常困难。

根据我尝试的方法,我往往会遇到object required错误或XPath selector invalid错误。我从Set systemAdmin =开始遇到问题。

任何建议都将受到欢迎!

Public Sub SeleniumTest()

    Dim driver As New WebDriver

    'open chrome to site
    driver.start "chrome"
    driver.Get "http://www.website.net"

    'login
    driver.FindElementByName("j_username").SendKeys ("user")
    driver.FindElementByName("j_password").SendKeys ("pass")
    driver.FindElementById("submit_button").Click


    'hover over Pricing Admin
    Dim pricingAdmin As WebElement
    Set pricingAdmin = driver.FindElementById("prcngAdmMnuFrm:prcngAdmMnu")

    driver.Mouse.MoveTo pricingAdmin


    Dim systemAdmin As WebElement
    'neither selection method below works properly
'   Set systemAdmin = driver.FindElementByXPath("//*[contains(text(),'System Admin')]")
'   Set systemAdmin = driver.FindElementByXPath("//div[@id='prcngAdmMnuFrm:prcngAdmMnu']/div/div/ul/li/ul/li[3]/ul/li[4]/a/span/span")

    driver.Mouse.MoveTo systemAdmin


    Dim multiPagUpload As WebElement
'   Set multiPagUpload = driver.FindElement("??")

    multiPagUpload.Click


    'closes browser window
    driver.Quit

End Sub

这是该网站的(摘要)HTML。为了简单起见,我整理了一些列表,但是如果确实有必要(使用javascript等),请告诉我,我可以弹出更多列表。

<div id="prcngAdmMnuFrm:prcngAdmMnu" style="">
    <div class="ui-widget ui-widget-content wijmo-wijmenu ui-corner-all ui-helper-clearfix wijmo-wijmenu-horizontal" aria-activedescendant="ui-active-menuitem" role="menubar">
        <div class="scrollcontainer checkablesupport">
            <ul style="display: block;" class="wijmo-wijmenu-list ui-helper-reset" tabindex="0">
                <li role="menuitem" class="ui-widget wijmo-wijmenu-item ui-state-default ui-corner-all wijmo-wijmenu-parent" aria-haspopup="true" style="">
                    <a href="#" class="wijmo-wijmenu-link ui-corner-all" id="">
                        <span class="wijmo-wijmenu-text">
                            <span class="wijmo-wijmenu-text">Pricing Admin</span>
                        </span>
                        <span class="ui-icon ui-icon-triangle-1-s"></span>
                    </a>
                    <ul class="wijmo-wijmenu-list ui-widget-content ui-corner-all ui-helper-clearfix wijmo-wijmenu-child" style="display: none; left: 0px; top: 38px; position: absolute; list-style-type: none;" aria-hidden="true">
                        <li role="menuitem" class="ui-widget wijmo-wijmenu-item ui-state-default ui-corner-all wijmo-wijmenu-parent" aria-haspopup="true" style="">
                            <a href="#" class="wijmo-wijmenu-link ui-corner-all ui-state-focus">
                                <span class="wijmo-wijmenu-text">
                                    <span class="wijmo-wijmenu-text">System Admin</span>
                                </span>
                                <span class="ui-icon ui-icon-triangle-1-e"></span>
                            </a>
                            <ul class="wijmo-wijmenu-list ui-widget-content ui-corner-all ui-helper-clearfix wijmo-wijmenu-child" style="display: none; left: 215px; top: -1px; position: absolute; list-style-type: none;" aria-hidden="true">
                                <li role="menuitem" class="ui-widget wijmo-wijmenu-item ui-state-default ui-corner-all">
                                    <a onclick="showProcessingMessage('Loading');;var self = this; setTimeout(function() { var f = function(opt){ice.ace.ab(ice.ace.extendAjaxArgs({&quot;source&quot;:&quot;prcngAdmMnuFrm:menu_pad_sa_multi&quot;,&quot;execute&quot;:'@all',&quot;render&quot;:'@all',&quot;event&quot;:&quot;activate&quot;}, opt));}; f({node:self});}, 10);" style="cursor:pointer;" class="wijmo-wijmenu-link ui-corner-all">
                                        <span class="wijmo-wijmenu-text">
                                            <span class="wijmo-wijmenu-text">Multi-PAG Upload</span>
                                        </span>
                                    </a>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
    <script type="text/javascript">
        var widget_prcngAdmMnuFrm_prcngAdmMnu = ice.ace.create("Menubar", ["prcngAdmMnuFrm:prcngAdmMnu", {
            "autoSubmenuDisplay": true,
            "direction": "auto",
            "animation": {
                "animated": "fade",
                "duration": 400
            }
        }]);
    </script>
</div>

如果我有任何需要解决的问题,请告诉我!

1 个答案:

答案 0 :(得分:1)

代码中使用的xpath不正确。我的建议是找到锚点元素并将鼠标移到上方。

#系统管理员菜单

Scenario Outline: Comparing names
    Given I have a first name <name1>
    And the first person has properties <properties1>
    And I have a second name <name2>
    And the second person has properties <properties2>
    When I choose the best name
    Then the best name should be <best name>

 Examples:
 | properties1                       | properties2       |
 | FirstName:"Carlos"                | FirstName:"Johny" |
 | LastName:"Smith"                  | FirstName:"Johny" |
 | FirstName:"John",LastName:"Smith" | LastName:"Smith"  |

如果鼠标悬停不起作用,我们仍然可以尝试通过单击锚点元素,然后单击sendkeys(keys.Arrow_Right)来处理菜单

#Multi-PAG上传

'Hover over Pricing Admin
Dim systemAdmin As WebElement
Set systemAdmin = driver.FindElementByXPath("//a[.//span[contains(.,'System Admin')]]")

driver.Mouse.MoveTo pricingAdmin