2012-06-27 9 views
6

Uruchomię mój test selenowy rc w Eclipse z TestNG. Mam link, który próbuje otworzyć nową stronę przeglądarki. Jak mogę wybrać tę nową stronę do działania? Używam tego kodu:selen, jak mogę wybrać nowe okno

selenium.selectWindow("name=NewPage");

jednak mówi strona nie została znaleziona. Staram się też określić identyfikatory stron lub tytuły z tego kodu:

String[] wins = selenium.getAllWindowIds(); 
    for (String s : wins) 
     System.out.println("win: " + s); 

To nie definiuje moją nową otwarte okno:

win: MainPage 
win: 

przypadku stosowania selenium.getAllWindowNames() uzyskać win: selenium_main_app_window win: selenium_blank65815.

piszę ten kod selenium.selectWindow("name=blank99157"); ale pojawia się błąd - ERROR: Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups-and-multiple-windows for potential workarounds.

Odpowiedz

0

Być może nie jest używany prawidłowy identyfikator okna.

Sprawdź ten link. Możesz znaleźć swoją odpowiedź here.

Poinformuj mnie, że to pomaga.

+0

nie pomocne dla mnie – khris

0

Wypróbuj selenium.getAllWindowNames(), selenium.getAllWindowTitles() .. jedno z nich zadziała na pewno.

+0

działa, ale nie można wybrać okno z nazwą – khris

+0

pokazał Korzystanie selenium.selectWindow (tytułowa), aby przejść tę stronę i selenium.selectWindow (null), aby wrócić do starego strona. Jeśli to nie działa, spróbuj również tego selenium.openWindow ("URL", "MyWindow"); selenium.selectWindow ("MyWindow"); –

7

Okno oczywiście nie ma nazwy, więc nie można go wybrać po nazwie.

  1. Jeśli okno jest otwierane za pomocą JavaScript i można zmienić scenariusz, spróbuj zmienić window.open("someUrl"); do window.open("someUrl", "someName");, będziesz wtedy mógł wybrać okno o nazwie zadanej. Więcej informacji na temat MDN doc for window.open().

  2. Selen RC nie obsługuje łączy <a href="someUrl" target="_blank"> (które otwierają łącze w nowym oknie). Dlatego też, jeśli okno jest otwarte przez łącza tego typu, trzeba znaleźć tę <a> elementu, uzyskać atrybut href i nazywają

    selenium.openWindow(theFoundUrl, "theNewWindow"); 
    selenium.selectWindow("id=theNewWindow"); 
    
  3. Jeżeli zostanie otwarty za pośrednictwem JavaScript przed lub w trakcie imprezy onload, ty „ll trzeba zadzwonić

    selenium.openWindow("", "theNewWindow"); 
    selenium.selectWindow("id=theNewWindow"); 
    

    Więcej informacji na ten temat w błąd SEL-339 lub w openWindow() i selectWindow() Javadocs.

  4. Jeśli masz tylko dwa okna/chcemy otworzyć najnowszy jeden, można spróbować

    selenium.selectPopup()

    To znaczy, oczywiście, najprostszym sposobem, ponieważ wybiera pierwszy okno non-top. Dlatego jest to przydatne tylko wtedy, gdy chcesz wybrać najnowsze wyskakujące okienko.

  5. Jeśli nowe okno ma unikalny tytuł, można zrobić

    selenium.selectPopup("Title of the window"); 
    

    lub selenium.selectWindow("title=Title of the window");

  6. W przeciwnym razie trzeba iteracyjne nad selenium.getAllWindowNames() aby uzyskać odpowiednią nazwę (Selen tworzy nazwy dla okna bez jednego). Nie możesz jednak zakodować tej nazwy w teście, ponieważ zmieni się za każdym razem, więc musisz opracować dla niej jakąś dynamiczną logikę.

  7. Nie spodoba ci się to: przejdź do WebDriver. Powinien on być o wiele bardziej odporny na takie problemy.

+0

Próbuję wariantu 6. Napisałem taki kod: String wins [] = selenium.getAllWindowNames(); \t dla (String s: wins) \t System.out.println ("win:" + s); \t \t \t \t selenium.selectWindow ("name = wins [2]"); – khris

+0

Ale pojawia się błąd: BŁĄD: Okno nie istnieje. Jeśli wygląda na błąd selenu, przeczytaj http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups i-multiple-windows, aby znaleźć możliwe obejścia. – khris

+0

@khris Tak, łącze w wyjątku polega na tym, że w dokumentach nie wspomniano o obejściach. Możesz jednak spróbować obejść, o której mowa w mojej odpowiedzi w sekcjach 2 i 3, to prawdopodobnie błąd, który widzisz. –

1
WebDriver driver = new FirefoxDriver(); 
WebElement inputhandler = driver.findelement(By.linktext("whatever here")); 
inputhandler.click(); 
String parentHandle = driver.getWindowHandle(); 
Set<String> PopHandle = driver.getWindowHandles(); 
Iterator<String> it = PopHandle.iterator(); 
String ChildHandle = ""; 
while(it.hasNext()) 
{ 
    if (it.next() != parentHandle) 
    { 
     ChildHandle = it.next().toString(); 
     // because the new window will be the last one opened 
    } 
} 
driver.switchTo().window(ChildHandle); 
WebDriverWait wait1 = new WebDriverWait(driver,30); 
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id("something on page"))); 

// do whatever you want to do in the page here 

driver.close(); 
driver.switchTo().window(parentHandle); 
Powiązane problemy