Selenium目标元素通过拥有和没有css选择器

时间:2016-11-30 22:20:24

标签: c# selenium firefox

我想在没有选择器的情况下立即点击按钮" style:display-none"

<div style="display: none;" id="pdp_size_select_container" class="select_size float_left" title="Select a Size">
</div>

现在,selenium正在寻找按钮本身,但它正在尝试点击,当然没有任何事情发生,因为它不可用。

new WebDriverWait(driver, TimeSpan.FromMinutes(10)).Until(ExpectedConditions.ElementExists((By.Id("pdp_size_select_container"))));
        IWebElement sizeselect = driver.FindElement(By.Id("pdp_size_select_container"));
        sizeselect.Click();
  

我想要一种方法来搜索拥有 ID的元素,没有选择器样式=&#34; display:none; &#34;

如果您感到困惑,网页上会有一个隐藏按钮。在某个时间,您可以点击它。但我正在进行循环检查,并且当样式选择器消失时,我想用WEBDRIVERWAIT循环检查按钮。

这是实际可用时的代码,上面是代码,当代码不可用时。

<div style="display: none;" id="pdp_size_select_container" class="select_size float_left" title="Select a Size">
</div>

4 个答案:

答案 0 :(得分:0)

你可以尝试检查元素是否有“display:block;”很有型。 所以selenium会等到元素不会改变显示为“阻塞”。

Css选择器将是:

"#pdp_size_select_container[style*='display: block;']"

编辑:

更好用:

"#pdp_size_select_container:not([style*='display: none;'])"

如果样式根本没有显示,则此选择器将起作用。或者使用来自Y-B原因的解决方案。

答案 1 :(得分:0)

此xpath将显示没有属性style ='display:none'的按钮。

//div[not(contains(@style, 'display: none'))][id='pdp_size_select_container']

按钮也会有多种样式,例如:

style='display: none; foo: bar; ceci: celà'

答案 2 :(得分:0)

您可以使用以下方法并按以下方式调用它。然后在正确显示xpath后,为您希望它执行的操作添加下一步。

         WaitForElementToNotExist("//myxpath']",20, SeleniumDriver);


         public static void WaitForElementToNotExist(string xpath, int seconds, IWebDriver driver)
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
        wait.Until<bool>((d) =>
        {
            try
            {
                // If the find succeeds, the element exists, and
                // we want the element to *not* exist, so we want
                // to return true when the find throws an exception.
                IWebElement element = d.FindElement(By.XPath(xpath));
                return false;
            }
            catch (NoSuchElementException)
            {
                return true;
            }
        });
    }

答案 3 :(得分:0)

我相信您需要做的就是将等待条件更改为ElementIsVisible

只要元素的有效样式为'display:none',检查就会返回false。

new WebDriverWait(driver, TimeSpan.FromMinutes(10)).Until(ExpectedConditions.ElementIsVisible((By.Id("pdp_size_select_container"))));
    IWebElement sizeselect = driver.FindElement(By.Id("pdp_size_select_container"));
    sizeselect.Click();