我希望能夠在Selenium 2的新選項卡中打開鏈接。另外,我想在完成與頁面的交互後關閉選項卡。如果我有標籤的WebElement
,這怎麼可能?Selenium 2:在新選項卡中打開鏈接並關閉標籤
我使用硒2 Firefox的驅動程序的Java API中,在Firefox 4
我希望能夠在Selenium 2的新選項卡中打開鏈接。另外,我想在完成與頁面的交互後關閉選項卡。如果我有標籤的WebElement
,這怎麼可能?Selenium 2:在新選項卡中打開鏈接並關閉標籤
我使用硒2 Firefox的驅動程序的Java API中,在Firefox 4
運行目前,硒的webdriver API沒有處理選項卡的任何方式。該項目真的需要一個統一的,跨瀏覽器的管理選項卡的方法,然後才能在Java之類的語言綁定之一中看到實現。在此之前,您的JavaScript解決方案可能是唯一的方法,並且請記住,您的代碼將負責管理該選項卡的生命週期。
我擔心這會是答案。謝謝。 – Alp 2011-05-17 21:07:28
我想出硒2,Chrome和Firefox的做工精細的方式,IE瀏覽器有安全檢查問題:
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
據我瞭解,這種方法只允許處理'windows',而不是'tabs' – Alp 2012-04-24 23:25:00
使用硒處於最佳狀態,我們在溶膠 - 邏輯與java.awt中結合起來.robot類。您可以發送可以關閉瀏覽器窗口的密鑰。嘗試使用
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
,如果它的工作原理
下面是它使用Python我怎麼沒回復。
該解決方案有點髒,但如果要關閉選項卡,則該解決方案可以工作。
我模仿mac快捷鍵CMD + W關閉一個標籤,如果你正在運行windows,你可能需要實現一個不同的組合鍵。
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)
我使用的是Robor類。
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_W);
這使機器人快速按下並釋放CTRL + W鍵來模擬用戶交互。如果您只使用keyPress事件,則會關閉WebDriver的所有選項卡和窗口。
希望我幫你。
花了一段時間(〜2周)讓我追蹤正確的命令序列,但這是迄今爲止我發現的一種Win7/Chrome設置最簡單的方法,可以在新選項卡AND開關中打開鏈接自動添加到新標籤。
警告!確保始終執行keyUp操作。如果你無法執行keyUp,你的系統將會保持這些鍵被按下,直到重新啓動或鍵盤輸入發生。
的Windows 7 /鉻:
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();
注:我知道這是一個古老的線程,我只是想在這裏編目解決方案,因爲我無法找到一個更好的解決方案,並希望拯救別人一一點時間(希望:)。
編輯:錯字
謝謝,這是一個很好的方法 – Alp 2015-01-12 22:17:37
希望我能夠專門幫助w/FF,但不幸的是我們使用Chrome作爲我們的主要測試瀏覽器。然而,相同的通用技術應該適用於他人和他們各自的關鍵組合。 – TwoByteHero 2015-01-14 20:51:47
酷東西!謝謝! – 2016-10-05 02:14:04
我想到了一個使用JavaScript的解決方案。也許這是最簡單的方法? – Alp 2011-05-17 16:25:26
你會分享這個解決方案嗎?我有同樣的問題。 – 2011-09-17 01:06:15
我沒有找到解決方案。看起來沒有辦法做到這一點,另見公認的答案。 – Alp 2011-09-17 09:01:04