量角器无法关闭salesforce的oauth2弹出窗口

时间:2015-05-01 07:23:50

标签: angularjs salesforce protractor

我是量角器的新手。我正在尝试为与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]);
        //
        //});

1 个答案:

答案 0 :(得分:0)

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

问题只发生在我有这个块时:

String regEx = "<span\\s+class=\"sup\">.+</span>[\n]*(\\d+(,)*\\d+)[\n*]<span\\s+class=\"visuallyhidden\">[.]*</span>[\n]*<span\\s+class=\"sup\">(\\d+)";
Pattern p1 = Pattern.compile(regEx);
System.out.println("Vikash");
while ((line = in .readLine()) != null) {
    sb.append(line + "\n");

}
m = p1.matcher(sb);
while (!m.hitEnd()) {
    if (m.find()) {
        System.out.println("$" + m.group());
    }
}

它是在beforeEach中具有AngularPage赋值的组合。

我尝试过在forEach之外进行任务。没错。

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

但是只要我将赋值放回forEach中,错误就会返回。