【问题标题】:Trouble selecting a hidden menu item using SeleniumBasic for vba使用 SeleniumBasic for vba 选择隐藏菜单项时遇到问题
【发布时间】:2019-08-12 21:11:34
【问题描述】:

我在使用SeleniumBasic for vba 在工作网页上选择隐藏菜单项时遇到了一些问题。我尝试使用WebDriver.Mouse.MouseTo 将鼠标悬停在每个菜单选项上,以便我可以选择嵌套在它“下方”的对象,但在第一次悬停后找不到该对象。

在下图中我打算这样导航:

Pricing Admin
    System Admin
        Multi-PAG Upload

为此,我必须将鼠标悬停在 Pricing Admin 上,然后将鼠标悬停在 System Admin 上,这样菜单才会出现点击Multi-PAG Upload强>。我已成功让驱动程序将鼠标悬停在 Pricing Admin 上,这会显示第一个菜单列表,其中包含以 System Admin 结尾的三个项目。但是,为 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>

如果我遗漏了您需要解决的任何问题,请告诉我!

【问题讨论】:

    标签: vba selenium-webdriver selenium-chromedriver


    【解决方案1】:

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

    #系统管理员菜单

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

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

    #Multi-PAG 上传

    Dim multiPagUpload As WebElement
    Set multiPagUpload = driver.FindElementByXPath("//a[.//span[contains(.,'Multi-PAG Upload')]]")
    
    multiPagUpload.Click
    

    【讨论】:

    • 很遗憾我还是得到Run-time error '438': Object doesn't support this property or method上线Set systemAdmin =
    • @Marcucciboy2 听起来像是 VBA 问题。让我们尝试直接使用元素而不是分配给变量。 driver.Mouse.MoveTo driver.FindElementByXPath("//a[.//span[contains(.,'System Admin')]]")
    • 更新了代码以删除重复的“driver.driver”。现在就试一试
    • 天哪,我不敢相信我没有足够好的证明来注意到额外的driver. >_>
    • 上面的xpath会点击元素的锚点部分,而不是span。它会根据子 span 元素上的文本来识别锚点。
    猜你喜欢
    • 2023-02-09
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2022-01-25
    相关资源
    最近更新 更多