C# Selenium声称显示的是真实的,但不可见(需要向下滚动)
我有一个包含表格数据的页面。存在一个滚动原因,导致所有数据不适合一页。我想断言最后一行不可见。我有一个密码:C# Selenium声称显示的是真实的,但不可见(需要向下滚动),c#,selenium,C#,Selenium,我有一个包含表格数据的页面。存在一个滚动原因,导致所有数据不适合一页。我想断言最后一行不可见。我有一个密码: var element = _driver.FindElement(By.Id("last-element")); element.Displayed // !!! true 我知道它可能被正确解析了,没有被样式隐藏,等等,但肯定用户看不到它 我创造了: static bool IsVisible(IWebElement webElement) { if (webElement
var element = _driver.FindElement(By.Id("last-element"));
element.Displayed // !!! true
我知道它可能被正确解析了,没有被样式隐藏,等等,但肯定用户看不到它
我创造了:
static bool IsVisible(IWebElement webElement)
{
if (webElement.Displayed == false)
{
return false;
}
RemoteWebElement remote = (RemoteWebElement) webElement;
return remote.Location.Y == remote.LocationOnScreenOnceScrolledIntoView.Y;
}
但它的行为更奇怪。代码到达LocationScreenOnScreedToView后,浏览器将滚动到该位置
Selenium 3.3、ChromeDriver 2.28与FirefoxDriver 0.14相同
我错过了什么
public bool Displayed(string elementTagName, string elementAttribute, string value)
{
var result = false;
try
{
var elementDisplayed = ((IJavaScriptExecutor)driver).ExecuteScript($"return $(\"{elementTagName}[{elementAttribute}=\'{value}\']:visible\").length").ToString();
result = string.Compare("0", elementDisplayed, StringComparison.OrdinalIgnoreCase) == 0;
}
catch (Exception)
{
//ignore exception
}
return result;
}
如果未显示元素,则返回true;如果显示元素,则返回false
只需像这样传递元素变量,Displayeddiv,class,rawr 我使用Javascript方法来实现这一点-您愿意这样做吗?@marwaha.ks请写下您是如何做到这一点的答案。我希望可以用后端代码完成,但JS仍然很好。您需要更改为等于才能工作:string.Equals0,elementDisplayed,StringComparison.OrdinalIgnoreCase==false;它不起作用,因为它还为您的选择器返回true:visible。但这让我意识到,我在理解html时遇到了一个问题,不像selenium那样工作。Thanks@KrzysztofMorcinek你能发布你的解决方案吗?