Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium声称显示的是真实的,但不可见(需要向下滚动)_C#_Selenium - Fatal编程技术网

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你能发布你的解决方案吗?