Доброго времени суток. Столкнулся с такой проблемой. Необходимо Сделать скриншот страницы + подсветить элемент .Как делать я знаю(делал когда-то так):
public static void HighlightElement(String screenshotName, IWebElement Element)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver();
String bgcolor = Element.GetCssValue("backgroundColor");
js.ExecuteScript("arguments[0].style.backgroundColor = '" + "red" + "'", Element);
SaveScreenshotWithHighlightedElement(screenshotName);
js.ExecuteScript("arguments[0].style.backgroundColor = '" + bgcolor + "'", Element);
}
public static void SaveScreenshotWithHighlightedElement(string filename)
{
Screenshot ss = ((ITakesScreenshot)Driver()).GetScreenshot();
ss.SaveAsFile(filename, System.Drawing.Imaging.ImageFormat.Png);
}
Но теперь концепция поменялась.
Дапупустим есть страница гугла для авторизации
class Authentication
{
public IWebDriver Driver()
{
return WebBrowser.GetInstance();
}
public IWebElement Account()
{
return Driver().FindElement(By.XPath("//*[@id='Email']"));
}
private IWebElement Password()
{
return Driver().FindElement(By.XPath("//*[@id='Passwd']"));
}
private IWebElement SignInButton()
{
return Driver().FindElement(By.XPath("//*[@id='signIn']"));
}
private IWebElement SignOutButton()
{
return Driver().FindElement(By.Id("gb_71"));
}
public IWebElement ProfileButton()
{
return Driver().FindElement(By.Id("gbg4"));
}
public void Open()
{
Open("https://accounts.google.com");
}
public void Open(string url)
{
Driver().Navigate().GoToUrl(url);
}
public void SignIn(string login, string password)
{
Open();
Account().SendKeys(login);
Password().SendKeys(password);
SignInButton().Click();
}
public void SignOut()
{
ProfileButton().Click();
SignOutButton().Click();
}
}
И как реализовать хайлайт элементов в рамках данной архитектуры у меня в голову не ложиться. Как мне кажется вызывать в кажом методе сделать скриншот это глупо.
Есть ли у кого идеи?