2017-06-02 81 views
0

我已经GOOGLE了这个小时,现在我有一个非常艰难的时间让我的UI测试专注于一个弹出窗口。在这个阶段,我很乐意点击“PayBill”,等待弹出窗口(即时加载),然后点击取消。专注于角度4与量角器弹出窗口

我的代码的最新版本上写着:

paybillButton.click(); 
browser.sleep(500); 

browser.getAllWindowHandles().then(function (handles) { 
    newWindowHandle = handles[1]; 
    browser.switchTo().window(newWindowHandle).then(function() { 
    cancelButton.click(); 
    }); 
}); 

但它一直未能browser.switchTo().window(newWindowHandle).then ...

之间的错误:

Failed: null value in entry: handle=null 
WebDriverError: null value in entry: handle=null 
    at Object.checkLegacyResponse (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:505:15) 
    at parseHttpResponse (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/http.js:509:13) 
    at doSend.then.response (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/http.js:440:13) 
    at process._tickCallback (internal/process/next_tick.js:103:7) 
From: Task: WebDriver.switchTo().window(undefined) 
    at thenableWebDriverProxy.schedule (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:816:17) 
    at TargetLocator.window (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:1755:25) 

我也从Failed: null value in entry: name=null error while switching Popup window尝试下面的代码...

function windowCount(count) { 
    return function() { 
    return browser.getAllWindowHandles().then(function (handles) { 
     return handles.length >= count; 
    }); 
    }; 
}; 
browser.wait(windowCount(2), 10000); 

browser.getAllWindowHandles().then(function (handles) { 
    browser.switchTo().window(handles[1]); 
    cancelButton.click(); 
}); 

但那返回此错误:

Failed: Wait timed out after 10002ms 
TimeoutError: Wait timed out after 10002ms 
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2107:17 
    at ManagedPromise.invokeCallback_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1366:14) 
    at TaskQueue.execute_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2970:14) 
    at TaskQueue.executeNext_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2953:27) 
    at asyncRun (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2813:27) 
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:676:7 
    at process._tickCallback (internal/process/next_tick.js:103:7) 
From: Task: <anonymous wait> 
    at scheduleWait (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2094:20) 
    at ControlFlow.wait (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2408:12) 

回答

0

switchTo方法是一个包装的硒的webdriver switchTo方法。 switchTo方法返回一个TargetLocator对象,而TargetLocator对象没有window方法。正确的方法是使用frame method

browser.getAllWindowHandles().then((handles) => { 
    let newWindowHandle = handles[1]; 
    browser.switchTo().frame(newWindowHandle).then(() => { 
    cancelButton.click(); 
    }); 
});