2010-10-04 7 views
12

Ich versuche Selenid zu verwenden, um eine Aktion zu duplizieren. Die Aktion klickt auf einen Link, der ein neues Fenster öffnet. Wie lässt sich Selenid auf das neue Fenster anstatt auf das andere konzentrieren? Es hat nicht für mich funktioniert.Wie konzentrieren Sie sich auf neue Fenster mit Selenide?

+0

überprüfen Sie diesen Link, ich auch in unten gepostet, ich bekomme das Gefühl SelectWindow ist sehr kaputt: http://jira.openqa.org/browse/SEL-703 – the0ther

Antwort

8

Wählen Sie Fenster

Dazu müssen Sie den selectWindow | windowName Befehl verwenden.

Um zurück in das Hauptfenster von dem anderen Fenster gehen Sie dann selectWindow | null

Arguments: 

    * windowID - the JavaScript window ID of the window to select 

Selects a popup window using a window locator; once a popup window 

ausgewählt wurde, gehen alle Befehle zu das Fenster. Um wieder das Hauptfenster auszuwählen, verwenden Sie null als Ziel.

Window locators provide different ways of specifying the window object: 

nach Titel, durch interne JavaScript "name" oder durch JavaScript-Variable.

* title=My Special Window: Finds the window using the text that 

erscheint in der Titelleiste. Achtung; zwei Fenster können den gleichen Titel teilen. Wenn das passiert, wird dieser Locator nur einen auswählen. * name = myWindow: Findet das Fenster seiner internen JavaScript "Name" Eigenschaft. Dies ist der zweite Parameter "windowName" an die JavaScript-Methode window.open (url, windowName, windowFeatures, replaceFlag) (die Selen abfängt) übergeben. * var = Variablenname: Einige Pop-up-Fenster sind nicht namentlich (anonym), sind aber mit einem JavaScript-Variablennamen in der aktuellen Anwendungsfenster zugeordnet, zum Beispiel "window.foo = window.open (url);". In diesen Fällen können Sie das Fenster öffnen mit „var = foo“.

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

wie dies bedeutet:

1.) if windowID is null, (or the string "null") then it is assumed the 

Benutzer beziehen sich auf die ursprünglichen Fenster vom Browser instanziiert).

2.) if the value of the "windowID" parameter is a JavaScript variable 

Name in den aktuellen Anwendung Fenster, dann wird angenommen, dass diese variable den Rückgabewert von einem Aufruf an dem JavaScript window.open() Methode enthält.

3.) Otherwise, selenium looks in a hash it maintains that maps string 

Namen zu Fenster "Namen".

4.) If that fails, we'll try looping over all of the known windows 

versuchen passende "Titel" zu finden. Da „Titel“ nicht notwendigerweise eindeutig ist, kann dies unerwartetes Verhalten hat.

If you're having trouble figuring out the name of a window that you want 

zu manipulieren, die Selen Log-Meldungen zu buchen, die die Namen von Fenstern über erstellt identifizieren window.open (und somit abgefangen durch Selen). Sie werden sehen, Meldungen wie für jedes Fenster die folgende, wie es geöffnet ist:

debug: window.open call intercepted; window ID (which you can 

Verwendung mit selectWindow()) ist "myNewWindow"

In some cases, Selenium will be unable to intercept a call to 

window.open (wenn der Anruf erfolgt während oder vor dem Ereignis "onLoad", für Beispiel). (Dies ist Bug SEL-339.) In diesen Fällen können Sie Selen zu Hinweis zwingen das offene Fenster den Namen mithilfe von die Selenium Openwindow-Befehl, mit einen leeren (leere) url, wie folgt aus: Openwindow („“ "myFunnyWindow").

selectWindow (WindowID)

selectPopup

Wenn es ein Pop-up dann selectPopUp | windowId tun ist, und dann in das Hauptfenster zurück zu gehen tun selectWindow | null

selectPopUp(windowID) Argumente:

  • FensterID - eine Kennung für das Popup-Fenster, die verschiedene Bedeutungen annehmen kann
  • Vereinfacht den Vorgang der Auswahl eines Popup-Fensters (und bietet keine Funktionalität, die selectWindow() bereits bietet).

  • Wenn windowID nicht angegeben oder als "null" angegeben ist, wird das erste nicht-oberste Fenster ausgewählt. Das obere Fenster ist dasjenige, das von selectWindow() ausgewählt würde, ohne eine windowID anzugeben. Dies sollte nicht verwendet werden, wenn mehr als ein Popup-Fenster im Spiel ist.
  • Andernfalls wird das Fenster sah WindowID als um folgende Berücksichtigung up:
    1. der "Name" des Fensters, wie angegeben()
    2. A JavaScript Variable window.open die eine Referenz zu einem Fenster
    3. Der Titel des Fensters. Dies ist das gleiche von selectWindow ausgeführt bestellt Nachschlag
+0

meldet der Fehler hier: http: // jira .openqa.org/browse/SEL-703 gilt für das, was Sie oben beschrieben haben? Ich habe jetzt stundenlang mit SelectWindow gerungen. macht mich verrückt. – the0ther

+2

großartig !!! benutze 'selectPopup' um mein Problem zu lösen. Danke vielmals! –

+0

Vergessen Sie auch nicht, ein'waitForPopUp' vor dem'selectPopup' zu platzieren, um sicherzustellen, dass das popUp geladen wurde, bevor Sie es auswählen. –

2

Sie können das Zufall Fenster ID speichern (erzeugt durch Selenium IDE) mit ‚storeAttribute‘ Befehl. Sie müssen die ID nur in einer Variablen speichern und dann das Fenster mit dem Befehl 'selectWindow' auswählen.

Versuchen Sie es mit dieser:

<tr> 
    <td>storeAttribute</td> 
    <td>link=Help [email protected]</td> 
    <td>window_ID</td> 
</tr> 

<tr> 
    <td>selectWindow</td> 
    <td>${window_ID}</td> 
    <td></td> 
</tr> 
3

Versuchen Sie, diese mit Selen Web Driver 2:

driver.switch_to.window(driver.window_handles.last); 
+0

Das OP fragt klar nach einer Lösung in Selenium IDE –

2

diese Bedenken Sie: würden Sie lieber nur das Attribut target="_blank" entfernen? Für mich ist dies eine Lösung gewesen:

getEval 
this.page().findElement('link=Facebook').removeAttribute('target'); 

im selben Fenster Bleiben Sie hat einige Vorteile in Selenium IDE, sieht es nicht Ziel leer unterstützt.

+0

sieht aus wie ich dies aus Versehen ausgefallen bin - die Lösung kommt ziemlich elegant in einer Mode Wunsch Ich könnte verbessern – Alvin

+0

Dies ist tatsächlich die schnellste und einfachste Lösung für die meisten Anwendungsfälle . Funktioniert auch auf Formularen! –

Verwandte Themen