硒找到元素(锚),但仍然说元素不可见?

时间:2019-09-16 13:16:40

标签: selenium xpath css-selectors webdriverwait linktext

我有一个“清除所有”按钮,它是一个锚点。 HTML结构是这样的:

filter

然后在Selenium测试中,我尝试使用以下方法找到!!标签:

<div class="form-row toggle-closed" id="ProductFilters" style="display: block;">
    <div class="form-row__filter">
        <ul class="form-row__filter__bg-display">
            <li class="filter__group__item__small">
                <a id="ProductFiltersFilterText" class="f-right" data-select-all="ProductFilters" href="#">clear all</a>
            </li>
        </ul>
    </div>  
</div>

然后我开始调试,在自动化的Chrome窗口中,我看到通过执行a,过滤器被展开,“清除所有”按钮被暴露,然后出现一个错误:

SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
var clearAllButton = _webDriver.FindElement(By.CssSelector("div.form-row__filter>ul>li>#ProductFiltersFilterText"));
clearAllButton.Click();

我在汽车上看到的情况如何: enter image description here

似乎找到了“全部清除”按钮,为什么它显示“元素不可见”?按钮的功能虽然是由JavaScript触发的。

1 个答案:

答案 0 :(得分:1)

要对文本为全部清除的元素进行click(),则必须为所需的ElementToBeClickable()引入 WebDriverWait ,并且可以使用以下任一方法以下Locator Strategies

  • linkText

    SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.LinkText("clear all"))).Click();
    
  • cssSelector

    SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("div#ProductFilters>div.form-row__filter>ul.form-row__filter__bg-display>li.filter__group__item__small>a#ProductFiltersFilterText"))).Click();
    
  • xpath

    SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@id='ProductFilters']/div[@class='form-row__filter']/ul[@class='form-row__filter__bg-display']/li[@class='filter__group__item__small']/a[@id='ProductFiltersFilterText']"))).Click();