首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium捕获Javascript处理的错误

Selenium捕获Javascript处理的错误
EN

Stack Overflow用户
提问于 2018-04-11 16:23:00
回答 3查看 76关注 0票数 0

我想在网站上通过我的程序登录。如果用户名或密码错误,我希望捕获错误消息(这是一个Javascript错误,如Bootstrap alert,它在x秒后改变可见性)。

我从以下几点开始:

代码语言:javascript
复制
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代码(无任何错误):

代码语言:javascript
复制
<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代码:

代码语言:javascript
复制
<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代码:

代码语言:javascript
复制
<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,但是我没有得到任何内部文本。

EN

回答 3

Stack Overflow用户

发布于 2018-04-11 17:10:24

您可以使用javascripts获取值:-

代码语言:javascript
复制
WebElement element = browser.FindElement(By.XPath("//p[@class='util-relative rsp-container']"));
 String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 
票数 0
EN

Stack Overflow用户

发布于 2018-04-11 17:16:20

您可以使用JavascriptExecutor获取Webelement的所有属性,并查看其中的错误消息,如下所示:

代码语言:javascript
复制
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>;
票数 0
EN

Stack Overflow用户

发布于 2018-04-11 18:08:25

根据您的问题,要提取错误消息用户名错误。您必须使用WebDriverWait,如下所示:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49770072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档