使用“Assert.IsTrue”作为与对象相关的位置

时间:2016-07-01 08:47:21

标签: c# html css selenium-webdriver

目标:
当您按下自定义的link时,您将进入网页,并且屏幕位于特定位置,您可以使用文本“填充 - 速记属性”

目标是使用Assert.IsTrue padding -shorthand属性及其内容位于可见计算机屏幕内。

问题:

我不知道是否可以使用SeleniumC#创建此方法。

我不知道从哪里开始。

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:0)

只有Selenium才能做到这一点。我们必须使用JavascriptExecutor执行一些Javascript。我们找到所需的元素并将其传递给IsElementInView(),它调用一些Javascript函数来返回元素的顶部/底部/左/右,并将它们与浏览器窗口的高度和宽度进行比较。

  • 如果top < 0,该元素不在上面的屏幕上。
  • 如果bottom > height,该元素不在屏幕下方。
  • 如果left < 0,则该元素不在屏幕左侧。
  • 如果right > width,则该元素在屏幕右侧。

如果以上任何一种情况属实,则该元素不在屏幕上。否则,元素就在屏幕上。

class Program
{
    static IWebDriver driver;

    static void Main(string[] args)
    {
        IWebDriver driver = new FirefoxDriver();
        driver.Manage().Window.Maximize();
        String searchText = "Padding - Shorthand Property";
        driver.Navigate().GoToUrl("http://www.w3schools.com/css/css_padding.asp");
        IWebElement e = driver.FindElement(By.XPath("//h2[text()=" + searchText + "]"));
        Console.WriteLine(IsElementInView(e));
    }

    public static Boolean IsElementInView(IWebElement e)
    {
        IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
        Double top = (Double)jse.ExecuteScript("return arguments[0].getBoundingClientRect().top", e);
        Double bottom = (Double)jse.ExecuteScript("return arguments[0].getBoundingClientRect().bottom", e);
        long left = (long)jse.ExecuteScript("return arguments[0].getBoundingClientRect().left", e);
        long right = (long)jse.ExecuteScript("return arguments[0].getBoundingClientRect().right", e);
        long width = (long)jse.ExecuteScript("return window.innerWidth");
        long height = (long)jse.ExecuteScript("return window.innerHeight");
        if (top < 0 || bottom > height || left < 0 || right > width)
        {
            return false;
        }
        return true;
    }
}