2013-10-03 9 views
8

Używam trzech instancji sterownika fire fox do automatyzacji. Muszę przynieść obecną aktywną przeglądarkę Firefoxa do przodu, ponieważ używam niektórych klas robo dla jakiegoś opertation. Wypróbowałem alert skryptu java dla google chrome w mac (ta sama operacja) i działało dobrze. W systemie Windows użyto user32 lib. W przypadku firefox mac pokazuje alert w tle, ale strona internetowa nie znajduje się na pierwszym planie.Przenieś przeglądarkę Firefox na wierzch używając selenu Java (Mac OSX)

((JavascriptExecutor)this.webDriver).executeScript("alert('Test')"); 
this.webDriver.switchTo().alert().accept(); 

Powyższy kod użyłem do chrome na Macu. Ten sam kod działa i pokazuje alert dla Firefoxa, ale okno nie przychodzi na pierwszy plan.

Proszę zasugerować, czy istnieje jakakolwiek inna metoda robienia tego samego w firefox.

+0

dziękuję! Mam dokładnie to samo pytanie * dla * chrome! Poniższa odpowiedź firefox nie działa, wykonanie 'window.focus()' wydaje się nie działać, ale twoja sztuczka pokazywania alertu, a następnie akceptowania go działa. Niezwykle przydatny! – davnicwil

Odpowiedz

11

Store okno obsłużyć pierwszy w zmiennej, a następnie użyć go, aby wrócić do okno później.

//Store the current window handle 
String currentWindowHandle = this.webDriver.getWindowHandle(); 

//run your javascript and alert code 
((JavascriptExecutor)this.webDriver).executeScript("alert('Test')"); 
this.webDriver.switchTo().alert().accept(); 

//Switch back to to the window using the handle saved earlier 
this.webDriver.switchTo().window(currentWindowHandle); 

Dodatkowo można spróbować zmaksymalizować okno po przełączeniu się na niego, które również powinno go aktywować.

this.webDriver.manage().window().maximize(); 
+0

To jest naprawdę niesamowite dzieło, ostatnio bardzo mi pomogło. Dzięki. –

+0

Żadne z nich nie działa z OSX z jakiegoś powodu. –

1

przełączanie Spróbuj użyć nazwy okna:

driver.switchTo().window("windowName"); 

Alternatywnie, można przekazać „klamki” metody switchTo().window(). Wiedząc o tym, że to możliwe iteracyjne nad każdą otwarte okno tak:

for (String handle : driver.getWindowHandles()) { 
    driver.switchTo().window(handle); 
} 

Na podstawie dokumentacji Selen: http://docs.seleniumhq.org/docs/03_webdriver.jsp

+0

Dziękuję za odpowiedź, ale stwierdziłem, że również nie działa, próbowałem już przejść do okna –

0

Jak opisano w innych tematach, można użyć

driver.manage().window().setPosition(new Point(-2000, 0)); 

też.

0
# notifications for selenium 
chrome_options = webdriver.ChromeOptions() 
prefs = {"profile.default_content_setting_values.notifications": 2} 
chrome_options.add_experimental_option("prefs", prefs) 
current_path = os.getcwd() # current working path 
chrome_path = os.path.join(current_path, 'chromedriver') 
browser = webdriver.Chrome(executable_path=chrome_path, chrome_options=chrome_options) 
browser.switch_to.window(browser.current_window_handle) 
browser.implicitly_wait(30) 
browser.maximize_window() 
browser.get("http://facebook.com")