Selenium - 如何切换到一个不同的(登录)窗口?

时间:2012-12-06 19:20:38

标签: selenium selenium-ide

我的应用程序有一个管理员帐户,测试就在其中。

此帐户具有用于登录的“常规”用户的超链接,例如:

一个http://dmplanning-stage.herokuapp.com/p/7Fimn1FRs1WZe5xmFTUA
两个http://dmplanning-stage.herokuapp.com/p/FRs1WZe7Fimn15TUAxmF
http://dmplanning-stage.herokuapp.com/p/mFTUA7Fimn1FRs1WZe5x

每次运行测试套件时都会生成这些链接,并且ID不同。

我创建了一个测试来查找并单击列出这些用户及其登录超链接的页面上的超链接。测试运行和selenium使浏览器打开新窗口,但我如何切换到它,所以我可以登录并继续?

为了使其更具挑战性,其他窗口有一个空标题,即

我可以让程序员添加标题,但这需要时间。是否有任何方法可以识别并切换到另一个窗口?

2 个答案:

答案 0 :(得分:2)

我假设您正在使用Selenium IDE。所以来自Selenium Reference


  

selectPopUp(windowID)

     

简化选择弹出窗口的过程   窗口(并不提供超出selectWindow()的功能   已提供)。

     
      
  • 如果未指定或指定windowID   如“null”,则选择第一个非顶部窗口。顶部窗口是   一个将由selectWindow()选择而不提供   windowID。当多个弹出窗口出现时,不应使用此选项   在游戏中。

  •   
  • 否则,将考虑windowID查找窗口   按顺序排列如下:1)窗口的“名称”,如指定的那样   to window.open(); 2)一个javascript变量,它是对a的引用   窗口; 3)窗口的标题。这是有序的   由selectWindow执行查找。

  •   

  

selectWindow(windowID)

     

使用窗口选择弹出窗口   定位器;一旦选择了弹出窗口,所有命令都会转到   那个窗口。要再次选择主窗口,请使用null作为目标。   窗口定位器提供了指定窗口的不同方法   对象:按标题,内部JavaScript“名称”或JavaScript   变量

     
      
  • 标题 = 我的特殊窗口:使用显示的文本查找窗口   在标题栏中。小心;两个窗口可以共享相同的标题。如果   如果发生这种情况,这个定位器只会选择一个。

  •   
  • 名称 = myWindow :查找   该窗口使用其内部JavaScript“name”属性。这是   传递给JavaScript方法的第二个参数“windowName”   window.open(url,windowName,windowFeatures,replaceFlag)(其中   Selenium截获)。

  •   
  • var = variableName :有些弹出窗口是   未命名(匿名),但与JavaScript变量相关联   当前应用程序窗口中的名称,例如“window.foo =   window.open(url);“。在这些情况下,您可以使用打开窗口   “VAR = foo” 的

  •   
如果您可以检索已打开的新窗口的名称,那么

selectWindow 将是理想的选择。

  

如果您在查找窗口名称时遇到问题   想要操纵,看看识别的Selenium日志消息   通过window.open创建的窗口名称(因此   由Selenium截获)。您将看到如下消息   每个窗口打开时:

     
    

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

  
     

在某些情况下,Selenium将无法拦截来电   window.open(如果调用发生在“onLoad”事件期间或之前,   例如)。 (这是错误SEL-339。)在这种情况下,你可以强迫   Selenium使用Selenium注意打开窗口的名称   openWindow命令,使用空(空白)url,如下所示:   openWindow(“”,“myFunnyWindow”)。

答案 1 :(得分:1)

您可以使用窗口操作切换到新窗口。 某种东西..

Webdriver driver = new FirefoxDriver();
driver.get  // Go to ur login page
driver.click //Click on link which launches new window
Set<String> s = driver.getwindowhandles() //this will return all open windows
driver.switchTo.window(s[1]);  //will switch to second window

希望有所帮助......