我想在网站上登录我的程序。如果用户名或密码错误,我想捕获错误消息(它是一个Javascript错误,如引导程序警报,它会在x秒后改变可见性)。
我从以下开始:
browser.FindElement(By.Name("user[login]")).SendKeys(Username);
IWebElement element = browser.FindElement(By.ClassName("flash-message"));
if(element.GetAttribute("style") != " ")
{
Debug.WriteLine("Error Message: " + browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']")).Text);
}
启动时错误框的HTML代码(没有任何错误):
<div class="flash-message notice" style="display:none">
<p class="util-relative rsp-container">
<a class="icon-close" href="" data-action="FlashHide"></a>
</p>
</div>
错误期间错误框的HTML代码:
<div class="flash-message alert" style="">
<p class="util-relative rsp-container">
Username wrong.
<a class="icon-close" href="" data-action="FlashHide"></a>
</p>
</div>
可见更改后错误框的HTML代码:
<div class="flash-message alert" style="display: none;">
<p class="util-relative rsp-container">
Username wrong.
<a class="icon-close" href="" data-action="FlashHide"></a>
</p>
</div>
我猜我可以用<p>
来抓住browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']")).Text
的内部文本:{{1}}而不是内部文本,我什么也得不到。
答案 0 :(得分:0)
您可以使用javascripts获取价值: -
WebElement element = browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
答案 1 :(得分:0)
您可以使用JavascriptExecutor获取Webelement的所有属性,并在其中查看您的错误消息:
WebElement element = browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']"));
IJavascriptExecutor javascriptDriver = (IJavaScriptExecutor)driver;
Dictionary<string, object> attributes = javascriptDriver.ExecuteScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;", element) as Dictionary<string, object>;
答案 2 :(得分:0)
根据您的问题提取错误消息用户名错误。,您必须使用 WebDriverWait ,如下所示:
IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
var myText = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@class='flash-message alert']/p[@class='util-relative rsp-container']"))).Text;