Selenium 找到元素(锚点)但仍然说元素不可见?
Selenium finds the element (anchor) but still says element not visible?
我有一个 "clear all" 按钮,它是一个锚点。 HTML结构是这样的:
<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>
然后在 Selenium 测试中,我尝试使用以下代码找到 a
标签:
SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
var clearAllButton = _webDriver.FindElement(By.CssSelector("div.form-row__filter>ul>li>#ProductFiltersFilterText"));
clearAllButton.Click();
然后我开始调试,在自动化的Chrome window中我可以看到通过执行ExpandFilterSection
,过滤器被展开,"clear all"按钮被暴露,然后一个错误说:
OpenQA.Selenium.ElementNotVisibleException: 'element not visible'
我在 Autos 中看到过什么:
好像找到了"clear all"按钮,为什么说是"element not visible"?不过,按钮的功能是由 JavaScript 触发的。
To click()
在文本为 clear all 的元素上,您必须为所需的 [=14] 引入 WebDriverWait =] 并且您可以使用以下任一项 :
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();
我有一个 "clear all" 按钮,它是一个锚点。 HTML结构是这样的:
<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>
然后在 Selenium 测试中,我尝试使用以下代码找到 a
标签:
SeleniumHelper.ExpandFilterSection(_webDriver, "#ProductFilters");
var clearAllButton = _webDriver.FindElement(By.CssSelector("div.form-row__filter>ul>li>#ProductFiltersFilterText"));
clearAllButton.Click();
然后我开始调试,在自动化的Chrome window中我可以看到通过执行ExpandFilterSection
,过滤器被展开,"clear all"按钮被暴露,然后一个错误说:
OpenQA.Selenium.ElementNotVisibleException: 'element not visible'
我在 Autos 中看到过什么:
好像找到了"clear all"按钮,为什么说是"element not visible"?不过,按钮的功能是由 JavaScript 触发的。
To click()
在文本为 clear all 的元素上,您必须为所需的 [=14] 引入 WebDriverWait =] 并且您可以使用以下任一项
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();