我想在网站上通过我的程序登录。如果用户名或密码错误,我希望捕获错误消息(这是一个Javascript错误,如Bootstrap alert,它在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>错误过程中Error Box的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,但是我没有得到任何内部文本。
发布于 2018-04-11 17:10:24
您可以使用javascripts获取值:-
WebElement element = browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 发布于 2018-04-11 17:16:20
您可以使用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>;发布于 2018-04-11 18:08:25
根据您的问题,要提取错误消息用户名错误。您必须使用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;https://stackoverflow.com/questions/49770072
复制相似问题