1. 程式人生 > >Selenium IDE錄製測試彈出視窗

Selenium IDE錄製測試彈出視窗

基於Selenium IDE 2.8.0
錄製腳本當點選如下的連結時,系統彈出新視窗
<a target="_blank" href="/portal/site/NewsPortal">See Other News</a>
在不做任何改動直接IDE回放會提示如下資訊,
[warn] Link has target '_blank', which is not supported in Selenium!  Randomizing target to be: selenium_blank*
並且測試會失敗, 原因是selenium執行下一步定位及驗證時沒有切換到新彈出的頁面

看一下selectWindow的API,可以用title, javascript name,和javascript 變數去定位:
selectWindow(windowID)
Arguments:
  • windowID - the JavaScript window ID of the window to select
Selects a popup window using a window locator; once a popup window has been selected, allcommands go to that window. To select the main window again, use null as the target.

Window locators provide different ways of specifying the window object:by title, by internal

JavaScript "name," or by JavaScript variable.

  • title=My Special Window:Finds the window using the text that appears in the title bar. Be careful;two windows can share the same title. If that happens, this locator willjust pick one.
  • name=myWindow:Finds the window using its internal JavaScript "name" property. This is the second parameter "windowName" passed to the JavaScript method window.open(url, windowName, windowFeatures, replaceFlag)(which Selenium intercepts).
  • var=variableName:Some pop-up windows are unnamed (anonymous), but are associated with a JavaScript variable name in the currentapplication window, e.g. "window.foo = window.open(url);". In those cases, you can open the window using"var=foo".

If no window locator prefix is provided, we'll try to guess what you mean like this:

1.) if windowID is null, (or the string "null") then it is assumed the user is referring to the original window instantiated by the browser).

2.) if the value of the "windowID" parameter is a JavaScript variable name in the current application window, then it is assumedthat this variable contains the return value from a call to the JavaScript window.open() method.

3.) Otherwise, selenium looks in a hash it maintains that maps string names to window "names".

4.) If that fails, we'll try looping over all of the known windows to try to find the appropriate "title".Since "title" is not necessarily unique, this may have unexpected behavior.

If you're having trouble figuring out the name of a window that you want to manipulate, look at the Selenium log messageswhich identify the names of windows created via window.open (and therefore intercepted by Selenium). You will see messageslike the following for each window as it is opened:

debug: window.open call intercepted; window ID (which you can use with selectWindow()) is "myNewWindow"

In some cases, Selenium will be unable to intercept a call to window.open (if the call occurs during or before the "onLoad" event, for example).(This is bug SEL-339.) In those cases, you can force Selenium to notice the open window's name by using the Selenium openWindow command, usingan empty (blank) url, like this: openWindow("", "myFunnyWindow").

所以解決方案是可以手工加一個selectWindow,並將彈出視窗page title作為引數
那麼錄製完彈出視窗,怎麼返回原先視窗呢? 參考API可以知道,將selectWindow引數設為null就可以了。