如何使用 Selenium Webdriver 验证浏览器通知

问题描述 投票:0回答:3

我正在使用 Selenium Webdriver 和核心 Java 自动化一个测试用例,其中单击一个按钮我会收到浏览器级通知“显示带有允许和阻止选项的通知”。单击“允许”按钮后,我想验证收到的网络推送通知的内容并单击它们。有谁知道如何通过 selenium 做到这一点。通知会像这样facebook chrome notifications

https://i.stack.imgur.com/ZNPYP.png

java selenium-webdriver push-notification webdriver
3个回答
1
投票

对于 Chrome 中的测试,我使用以下命令来检查推送通知是否可见。

//SITE: 
 driver.get("http://makemytrip.com/");

//Test for PUSH NOTIFICATION

if(driver.findElement(By.cssSelector("[id='webpush-bubble']" )).isDisplayed()) {
   System.out.println("Push Prompt is Present");

//Popup active(as iFrame) so navigate in it and get text
//See=> https://sqa.stackexchange.com/questions/31693/how-to-read-html-source-from-iframe-using-selinium-webdriver
  WebElement iFrame = driver.findElements(By.tagName("iframe")).get(6); 
 driver.switchTo().frame(iFrame);
          System.out.println(driver.findElement(By.xpath("//div[@class='description']")).getText());
//Then switch back to normal content for any other navigation           
driver.switchTo().defaultContent();

    } else {
        System.out.println("Push Prompt NOT Present");
    }

0
投票

似乎没有办法通过 Webdriver 本地处理它。

但是,如果您可以控制网站的源代码(或者可以要求开发人员添加几行),实际上有一种方法可以测试它。

只需将创建的通知保存在全局 Javascript 变量中:

var lastNotification;

// Later in the code where the notification is created...
let notification = new Notification(...);
// ... save it to be accessed from WebDriver tests. Also could be pushed to a list if many notifications can be present at the same time.
lastNotification = notification;

然后,您可以从您的 WebDriver 等待通知出现(如果需要):

new WebDriverWait(...).until(ExpectedConditions.jsReturnsValue("return lastNotification");

然后您可以单击它(或执行

Notification
Javascript API 允许您执行的任何操作):

JavascriptExecutor jsDriver = (JavascriptExecutor) driver;
jsDriver.executeScript("lastNotification.dispatchEvent(new Event('click'))");

-1
投票

您可以控制 Firefox 配置文件范围内的首选项以允许网络通知。

profile.setPreference("permissions.default.desktop-notification", 1);

请参阅几乎重复的问题和答案以获取更多信息:https://stackoverflow.com/a/49111281/1079254

© www.soinside.com 2019 - 2024. All rights reserved.