2011-05-17 24 views
13

Selenium 2'de yeni bir sekmede bir bağlantı açmak istiyorum. Ayrıca, sayfa ile etkileşimde kaldığımda sekmeyi kapatmak istiyorum. WebElement<a> etiketinin olması durumunda bu nasıl olabilir?Selenium 2: Bağlantıyı yeni sekmede aç ve sekmeleri kapat

Şu anda

+0

JavaScript kullanarak bir çözüm düşündüm. Belki bu en kolay yoldur? – Alp

+1

Bu çözümü paylaşır mısınız? Bendede aynı sorun var. –

+0

Bir çözüm bulamadım. Bunu yapmanın bir yolu yok gibi görünüyor, ayrıca kabul edilen cevaba bakınız. – Alp

cevap

6

Firefox 4. üzerinde çalışan Firefox Sürücü ile Selenyum 2 Java API kullanıyorum, Selenyum WebDriver API sekmeleri taşıma herhangi bir şekilde bulunmamaktadır. Projenin, Java gibi dil bağlamalarından birinde bir uygulama görmeyi beklemeden önce, sekmeleri yönetmek için tutarlı, çapraz tarayıcı yöntemlerine gerçekten ihtiyacı olacaktır. O zamana kadar, JavaScript çözümünüz tek yol olabilir ve kodunuzun o sekmenin ömrünü yönetmek için sorumlu olacağını unutmayın.

Set<String> winSet = webDriver.getWindowHandles(); 
List<String> winList = new ArrayList<String>(winSet); 
String newTab = winList.get(winList.size() - 1); 
webDriver.close(); // close the original tab 
webDriver.switchTo().window(newTab); // switch to new tab 
+0

Bunun cevabın olacağı korkuyordum. Teşekkür ederim. – Alp

7

Ben, selenyum 2 için anlamaya Chrome ve Firefox için iyi çalışır yolu, IE güvenlik kontrolü sorunu var .robot sınıfı. Bir tarayıcı penceresini kapatabilecek anahtarlar gönderebilirsiniz.

Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_CONTROL); 
robot.keyPress(KeyEvent.VK_W); 

kullanmayı deneyin ve onu Burada

+2

anladığım kadarıyla, bu yöntem sadece 'windows', 'tabs' değil – Alp

6

java.awt birleştirin sol-mantık de biz en iyi şekilde selenyum kullanımı:

3

işleri ben Python kullanarak nasıl yaptığını ise cevap.

Bu çözüm biraz kirli, ancak sekmeyi kapatmak istiyorsanız çalışır.

Pencereleri çalıştırıyorsanız, bir sekmeyi kapatmak için CMD + W kısayolunu taklit ediyorum, farklı bir tuş bileşimini uygulamanız gerekebilir.

import from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://www.amazon.com/gp/search/ref=sr_in_-2_p_lbr_brands_browse-_2895?rh=n%3A172282%2Cn%3A!493964%2Cn%3A502394%2Cp_lbr_brands_browse-bin%3ALytro") 
action_chains = ActionChains(driver) 
action_chains.key_down(Keys.COMMAND + "w") 
action_chains.perform() 
action_chains.key_up(Keys.COMMAND + "w") 
driver.implicitly_wait(5) 
3

Kullandığım Robor sınıfı.

Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_CONTROL); 
robot.keyPress(KeyEvent.VK_W); 
robot.keyRelease(KeyEvent.VK_CONTROL); 
robot.keyRelease(KeyEvent.VK_W); 

Bu, Robot'un kullanıcı etkileşimini simüle etmek için CTRL + W tuşlarına hızlıca basıp serbest bırakmasını sağlar. Sadece keyPress olayını kullanırsanız, bu, WebDriver'ın tüm sekmelerini ve pencerelerini kapatır.

Umarım yardımcı oldum.

4

Doğru komut dizisini izlemek için bir süre (~ 2 hafta) kullandım, ancak bu, Win7/Chrome kurulumunda yeni bir sekmede bir bağlantı açmak için bulduğum en kolay yöntemdir VE anahtar otomatik olarak yeni sekmeye.

UYARI! Her zaman keyUp eylemlerini gerçekleştirdiğinizden emin olun. Eğer keyUp işlemini gerçekleştiremezseniz, sisteminiz bu tuşları bir yeniden başlatma veya keyUp gerçekleşene kadar basılı tutacaktır.

Windows 7/Krom:

WebElement elem = driver.findElement(By.linkText("MyLinkText")); 

// Chrome key combos: 
// SHIFT + CTRL + click = Open in new tab (and switch to new tab) 
// SHIFT + CTRL + RETURN = Open in new tab (in background) 
Actions act = new Actions(driver); 
act.keyDown(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform(); 

// Wrap in a try/catch during implementation to ensure you perform keyUp(s). 
elem.click(); 

act.keyUp(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform(); 

Not: Ben sadece ben daha zarif bir çözüm bulamadığı için burada çözüm katalog istedim ve başka bir birini kurtarmak istedim, eski bir iplik olduğunu biliyorum az zaman (umarım :).

Düzenleme: Typo

+0

teşekkürler, bu büyük bir yaklaşım – Alp

+0

dilek izin verir Ben özellikle w/FF yardımcı olabilir dilek ama maalesef biz birincil sınav tarayıcı olarak Chrome kullanıyoruz. Bununla birlikte, aynı genel teknik, diğerleri için kendi anahtar kombinasyonları ile çalışmalıdır. – TwoByteHero

+0

Harika şeyler! Teşekkürler! –

İlgili konular