javascript - Protractor 无法识别打开的 native 警报

标签 javascript selenium-webdriver jasmine protractor alert

我正在尝试处理 native 打开的警报,但 Protractor 无法识别此警报并向控制台发送错误 -

1) Test cases pull - LiveSite - Call Message: NoSuchAlertError: no alert open (Session info: chrome=51.0.2704.103) (Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 9 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'vCitaQA', ip: '10.0.0.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_65' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\idan\AppData\Local\Temp\scoped_dir3336_20019}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=51.0.2704.103, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: 96c8dfa136495b599f607d50616468de Stacktrace: NoSuchAlertError: no alert open (Session info: chrome=51.0.2704.103) (Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 9 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'vCitaQA', ip: '10.0.0.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_65' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\idan\AppData\Local\Temp\scoped_dir3336_20019}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=51.0.2704.103, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: 96c8dfa136495b599f607d50616468de at new bot.Error (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js:113:18) at Object.bot.response.checkResponse (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\response.js:106:9) at C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:377:20 at [object Object].promise.ControlFlow.runInFrame_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.Callback_.goog.defineClass.notify (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2464:25) at [object Object].promise.Promise.notify_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43) at [object Object].promise.Promise.notifyAll_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:552:16) at goog.async.run.processWorkQueue (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) From: Task: Asynchronous test function: it() at [object Object]. (C:\automation\npm\node_modules\protractor\node_modules\jasminewd\index.js:93:33) at [object Object]. (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37) at [object Object].jasmine.Block.execute (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31) at [object Object]._onTimeout (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2199:18) Error at [object Object]. (c:\automation\tests\testCases\newApp\livesiteClient.js:74:3) at [object Object].jasmine.Env.describe_ (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15) at describe (C:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:658:27) at Object. (c:\automation\tests\testCases\newApp\livesiteClient.js:1:63)

我已经尝试过使用 -

 describe('vCita Production - Livesite (client side)', function() {

   var EC = protractor.ExpectedConditions;
   var callBtn = $$('div.action-content.layout-align-center.layout-column.flex').get(1); 

      beforeEach(function() {
        browser.ignoreSynchronization = true;
      });

      afterEach(function() {
        browser.ignoreSynchronization = false;
      });

  it('click on call button', function() {
    callBtn.click().then(function(){
      browser.driver.sleep(2000);
      browser.driver.switchTo().alert().dismiss();
    });
  });
});  

还有下面的代码(实际上是有效的,但它只是忽略了alret并且不会进入“(alert)”if语句 -

browser.getAllWindowHandles().then(function (handles) {      
    browser.switchTo().window(handles[handles.length - 1]);
    var alertDialog = browser.switchTo().alert().thenCatch(function (e) {
        if (e.code !== 27) { throw e; }
    }).then(function (alert) {
        if (alert) {
            expect(alertDialog.getText()).toEqual("External Protocol Request");
            return alert.dismiss();
        }

callBtn.click();

最佳答案

问题是,这是“外部协议(protocol)请求”对话框 - 它不是 native 警报,而是一个浏览器/系统对话框,无法从 Protractor/Selenium 端进行控制。以下是相关线程以及 chrome 情况下的一些附加信息:

对于 Firefox,事情可能会更简单。这个想法是:

  • 首先手动打开 Firefox,点击“调用”按钮并选择默认应用程序
  • 转到“帮助”->“疑难解答信息”,然后点击“配置文件文件夹”行中的按钮
  • 将路径复制到配置文件目录和 start protractor+firefox with this profile

关于javascript - Protractor 无法识别打开的 native 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38432056/

相关文章:

selenium-webdriver - 是否可以在远程浏览器上使用头部运行 Protractor 测试?

javascript - 运行毯.js

node.js - 如何从 Node 项目的命令行运行 Jasmine 测试框架 2.0

javascript - 如何测试仅用作模板的指令

javascript - 如何读取文件夹图像并在 html 中显示?

javascript - 使用 JavaScript 删除添加到所选文本的突出显示?

PHP 智能 || (OR) 运算符就像 JavaScript 中一样

java - 如何让 Selenium 等到元素出现?

python - Python/Selenium 中查询链接打印错误

javascript - 使用 Jasmine 测试 Javascript 函数