目标:
当您按下自定义的link时,您将进入网页,并且屏幕位于特定位置,您可以使用文本“填充 - 速记属性”。
目标是使用Assert.IsTrue
padding -shorthand属性及其内容位于可见计算机屏幕内。
问题:
我不知道是否可以使用Selenium
和C#
创建此方法。
我不知道从哪里开始。
谢谢!
答案 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;
}
}