我是量角器的新手。我正在尝试为与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]);
//
//});
答案 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中,错误就会返回。