是否有DOTNET的硒webdriver的(2.22.0)的最新版本的方式来检查,看看是否元素点击之前是可见/与其交互?
我发现的唯一方法是尽量处理,当您尝试发送键或点击它时出现的ElementNotVisible例外。 不幸的是已经取得了与要素互动的尝试后,才会出现这种情况。 我使用递归函数来找到具有一定的价值元素,这些元素都只是在某些情况下可见的(但他们的HTML仍然存在,不管是什么,这样他们就可以找到)。
这是我的理解是,RenderedWebElement类是过时以及其他变体。 因此,没有铸造了这一点。
谢谢。
对于Java有isDisplayed()在RemoteWebElement - 以及是的IsEnabled()
在C#中,有一个显示和Enabled属性。
一个元素是页面和用户可见的两个必须是真实的。
在的情况下, “HTML仍然存在,不管是什么,这样他们就可以找到”,简单地检查这两个isDisplayed(JAVA)/显示(C#)和的IsEnabled(JAVA)/启用(C#)。
例如,在C#:
public void Test()
{
IWebDriver driver = new FirefoxDriver();
IWebElement element = null;
if (TryFindElement(By.CssSelector("div.logintextbox"), out element)
{
bool visible = IsElementVisible(element);
if (visible)
{
// do something
}
}
}
public bool TryFindElement(By by, out IWebElement element)
{
try
{
element = driver.FindElement(by);
}
catch (NoSuchElementException ex)
{
return false;
}
return true;
}
public bool IsElementVisible(IWebElement element)
{
return element.Displayed && element.Enabled;
}
看来目前这个问题的答案已经过时:随着3.13的webdriver同时Displayed
,并Enabled
在页面上存在的元素属性将返回true长,即使是视域之外。 下面的C#代码适用于webdriver的3.13(从这个StackOverflow的答案 ):
{
return (bool)((IJavaScriptExecutor)Driver).ExecuteScript(@"
var element = arguments[0];
var boundingBox = element.getBoundingClientRect();
var cx = boundingBox.left + boundingBox.width/2, cy = boundingBox.top + boundingBox.height/2;
return !!document.elementFromPoint(cx, cy);
", element);
}
有一个简单的方法来做到这一点,请按照下列:
public bool ElementDisplayed(By locator)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(condition: ExpectedConditions.PresenceOfAllElementsLocatedBy(locator));
return driver.FindElement(locator).Displayed ;
}