【问题标题】:Selenium how to click a button with hidden attributeSelenium如何单击具有隐藏属性的按钮
【发布时间】:2020-05-16 22:17:34
【问题描述】:

我需要单击一个属于网格菜单的按钮。它显示的是网格中的项目价格列,默认情况下它是隐藏的。

<button type="button" class="ui-grid-menu-item" ng-click="itemAction($event, title)" ng-show="itemShown()" ng-class="{ 'ui-grid-menu-item-active': active(), 'ui-grid-sr-only': (!focus &amp;&amp; screenReaderOnly) }" aria-pressed="" tabindex="0" ng-focus="focus=true" ng-blur="focus=false" aria-hidden="true"><i ng-class="icon" aria-hidden="true" class="ui-grid-icon-ok">&nbsp;</i> Item Price</button>

我采取了一种方法,首先通过设置 aria-hidden="false" 使其显示。

        IJavaScriptExecutor js = (IJavaScriptExecutor)(_chromeDriver);
        js.ExecuteScript("document.getElementByXPath('//*[@id='menuitem-5']/button').setAttribute('aria-hidden', 'false')");

但我收到了 javascript 错误。

javascript error: missing ) after argument list
  (Session info: chrome=81.0.4044.138)

我也检查了这个答案

Selenium EventFiringWebDriver JavaScript: SyntaxError: missing ) after argument list

但还没有解决方案。 我该如何解决?我的方法正确还是应该改变?

【问题讨论】:

    标签: javascript c# selenium hidden


    【解决方案1】:

    你可以使用javascript直接点击元素

    IWebElement element = _chromeDriver.FindElement(By.XPath("//*[@id='menuitem-5']/button"));
    
    js.ExecuteScript("arguments[0].click();", element);
    

    我认为您看到的错误来自这一行:

    IJavaScriptExecutor js = (IJavaScriptExecutor)(_chromeDriver);
    

    改成这样:

    IJavaScriptExecutor js = ((IJavaScriptExecutor)_chromeDriver);
    

    【讨论】:

    • 它也给出了同样的错误。 javascript error: missing ) after argument list (Session info: chrome=81.0.4044.138)
    • 我添加到我的答案中
    • 我从 javascript 中分离找到元素并编辑了我的答案
    • 这行得通。你能解释一下为什么在搜索和操作结合时它不起作用吗?
    • 我不确定。我也需要研究一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多