我想在没有选择器的情况下立即点击按钮" 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>
答案 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();