【问题标题】:How to click on an element with aria-hidden="true" using Selenium如何使用 Selenium 单击 aria-hidden="true" 的元素
【发布时间】:2019-06-20 06:50:15
【问题描述】:

我有如下 HTML

<div class="summary-row">
    <div class="text-center" id="summary-back">
        <a href="/Health/Dependents">
            <svg class="svg-inline--fa fa-chevron-left fa-w-8 font-32" data-auto="back-btn" aria-hidden="true" data-prefix="fal" data-icon="chevron-left" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512" data-fa-i2svg=""><path fill="currentColor" d="M238.475 475.535l7.071-7.07c4.686-4.686 4.686-12.284 0-16.971L50.053 256 245.546 60.506c4.686-4.686 4.686-12.284 0-16.971l-7.071-7.07c-4.686-4.686-12.284-4.686-16.97 0L10.454 247.515c-4.686 4.686-4.686 12.284 0 16.971l211.051 211.05c4.686 4.686 12.284 4.686 16.97-.001z"></path></svg><!-- <i class="fal fa-chevron-left font-32" data-auto="back-btn"></i> -->
        </a>
        </div>

而 RemoteWebDriver 无法找到该元素,我认为它是由于隐藏属性,如何点击该元素?

【问题讨论】:

  • 您要定位哪个元素?
  • svg 元素是一个具有隐藏属性的按钮。
  • 您无需到达&lt;svg&gt; 标签。尝试在&lt;a&gt; 标签上调用click()

标签: c# selenium xpath css-selectors webdriverwait


【解决方案1】:

您可以使用 JavaScriptExecutor 点击元素,例如:

WebElement element = driver.findElement(By.id("summary-back"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

【讨论】:

    【解决方案2】:

    要在元素上click(),您必须诱导 WebDriverWait 以使 元素可点击,您可以使用以下任一 Locator Strategies

    • CssSelector:

      new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("div.summary-row > div#summary-back > a[href=/Health/Dependents]"))).Click();
      
    • XPath:

      new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@class='summary-row']/div[@id='summary-back']/a[@href='/Health/Dependents']"))).Click();
      

    【讨论】:

    • @Rasika 你能给我这个答案的反馈吗?
    【解决方案3】:

    我刚刚将属性“aria-hidden”从“true”更改为“false”,然后我点击了。

    也许该代码可以帮助您。

    public void ClickElementHidden()
    {
    ((IJavaScriptExecutor)driver).ExecuteScript("document.getElementsByClassName('svg-inline--fa fa-chevron-left fa-w-8 font-32')[0].setAttribute('aria-hidden', 'false')");
    driver.FindElement(By.CssSelector("#summary-back > a > svg")).Click();   
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      相关资源
      最近更新 更多