2017-06-02 1 views
0

Ich habe dies stundenlang gegooglet und ich habe eine furchtbar harte Zeit, meine UI-Test auf ein Popup-Fenster zu konzentrieren. In diesem Stadium würde ich mich freuen, einfach auf "PayBill" zu klicken, auf das Popup-Fenster zu warten (das sofort geladen wird) und dann auf "Abbrechen" zu klicken.Fokussieren auf Angular4 Popup-Fenster mit Winkelmesser

Die neueste Version von meinem Code lautet:

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

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

Aber es hält andernfalls zwischen browser.switchTo() und .window(newWindowHandle).then ...

Fehler:

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) 

ich auch unter den Code aus Failed: null value in entry: name=null error while switching Popup window versucht haben, ...

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(); 
}); 

Aber das ist die Rückkehr dieser Fehler:

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) 

Antwort

0

Die switchTo Methode ist ein Wrapper um das Selen-WebDriver switchTo Methode. Die switchTo-Methode gibt ein TargetLocator-Objekt zurück, und das TargetLocator-Objekt verfügt nicht über eine window-Methode. Der richtige Weg, dies zu tun, ist die Verwendung der frame method.

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