【问题标题】:protractor can't close oauth2 popup from salesforce量角器无法从 Salesforce 关闭 oauth2 弹出窗口
【发布时间】:2015-05-05 14:50:34
【问题描述】:

我是量角器的新手。我正在尝试为与 salesforce 交互的 Web 应用程序编写测试。在测试开始时,它会显示一个 oauth2 弹出窗口,供用户授权应用程序。

当我在弹出窗口中调用 browser.driver.close() 时,它会停留在屏幕上并且我收到以下错误消息:

Failures:

  1) get past the oauth2 should just get as far as possible, for now
   Message:
     NoSuchWindowError: no such window: target window already closed
from unknown error: web view not found

我的测试确实单击了弹出窗口中的最终“授权”按钮。这应该使弹出窗口自行关闭。当我手动单击它时它工作正常,但当量角器单击它时似乎不起作用。

oauth2 进程本身似乎工作正常,因为之后我可以看到来自 salesforce 的主窗口加载数据。

我很乐意将弹出窗口留在那里,但随后在测试中出现“元素不可见”错误。我认为这些错误是由显示在主窗口顶部的弹出窗口引起的。

我猜这个弹出窗口有一些与 browser.driver.close() 不兼容的配置。当我在调用 close() 之前尝试切换到主窗口时,它会正常关闭。

测试规范的相关部分如下。注释掉的块显示了我尝试过的一些实验。他们都没有工作。

有没有人有使用 salesforce oath2 弹出窗口的经验,并有任何建议?或者知道会导致这种行为的任何窗口配置?

describe('get past the oauth2', function () {

var page;

beforeEach(function () {
    page = new AngularPage();
});

it('should just get as far as possible, for now', function () {
    browser.get('http://localhost:8080/test/LocalTest.html#/templateManager');

    browser.getAllWindowHandles().then(function (handles) {

        // switch to the popup
        browser.driver.ignoreSynchronization = true;
        browser.driver.switchTo().window(handles[1]);

        browser.driver.findElement(by.id('username')).click();
        browser.driver.findElement(by.id('username')).sendKeys('test_user@test.com');
        browser.driver.findElement(by.id('password')).sendKeys('test');
        browser.driver.findElement(by.id('Login')).click();

        browser.driver.wait(function () {
                return browser.driver.isElementPresent(by.id('oaapprove'));
            },
            10000);

        browser.driver.findElement(by.id('oaapprove')).click();

        //browser.driver.ignoreSynchronization = false;
        //browser.driver.switchTo().window(handles[0]);

        browser.driver.close();

        browser.driver.switchTo().window(handles[0]);

        //browser.driver.close().then(function () {
        //
        //    //to switch to the previous window
        //    browser.switchTo().window(handles[0]);
        //
        //});

【问题讨论】:

    标签: angularjs salesforce protractor


    【解决方案1】:

    我通过反复试验弄明白了。

    只有当我有这个块时才会出现这个问题:

    beforeEach(function () {
        page = new AngularPage();
    });
    

    它是在 beforeEach 中分配 AngularPage 的组合。

    我尝试在 forEach 之外进行分配。没有错误。

    我尝试在 forEach 块中添加不同的语句。没有错误。

    但是,一旦我将分配放回 forEach 中,错误就会返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2015-10-09
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多