Как нажать на элемент с aria-hidden = "true" с помощью Selenium - PullRequest
0 голосов
/ 20 июня 2019

У меня есть 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 не может найти элемент, и я предполагаю, что это из-за скрытого атрибута. Как можно щелкнуть этот элемент?

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

К click() на элементе, который вы должны заставить WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из следующих Стратегий локатора :

  • 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();
    
0 голосов
/ 21 июня 2019

Я только что изменил атрибут "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();   
}
0 голосов
/ 20 июня 2019

Вы можете нажать на элемент, используя JavaScriptExecutor, например:

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