Selenium 从通知登录消息获取文本
我有一个Angular应用程序,我想使用SeleniumWeb驱动程序和Java来测试它。 成功或不成功的用户登录通知消息显示在网页中后:Selenium 从通知登录消息获取文本,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我有一个Angular应用程序,我想使用SeleniumWeb驱动程序和Java来测试它。 成功或不成功的用户登录通知消息显示在网页中后: <div class="overlay-container"> <div id="toast-container" class="toast-top-right toast-container"> <div toast-component="
<div class="overlay-container">
<div id="toast-container" class="toast-top-right toast-container">
<div toast-component="" class="toast-error ngx-toastr ng-trigger ng-trigger-flyInOut" style="opacity: 1;">
<!----><button aria-label="Close" class="toast-close-button ng-tns-c11-11 ng-star-inserted" style=""><span class="ng-tns-c11-11" aria-hidden="true">×</span></button><!----><!----><!---->
<div aria-live="polite" role="alertdialog" class="toast-message ng-star-inserted" aria-label="Logon failure: unknown user name or bad password." style=""> Logon failure: unknown user name or bad password. </div>
<!---->
</div>
</div>
</div>
对于第二次findElement
,我得到false和NPE
您知道如何解决此问题吗?isDisplayed()
返回false。这可能是因为您正在寻找(等待)DOM中元素的存在。这并不意味着它isDisplayed()
。这有点复杂,有一个很好的答案,但在求和中,它的大小必须是非零的,并且必须设置一些属性才能将其视为显示。土司很可能位于DOM中,但尚未完全呈现以被视为已显示
NPE的第二个问题可能是您获取toast元素并对其执行findElement,这意味着xpath将相对于toast元素执行。这意味着xpath实际执行为:
//*[@id='toast-container']/.//*[@id='toast-container']/div/div
这不是你真正想要的。您可能只想执行以下操作:
WebElement element = failedLoginWebElement.findElement(By.xpath("/div/div"));
你能分享你的网址吗?这是一个内部系统。
WebElement element = failedLoginWebElement.findElement(By.xpath("/div/div"));