簡體   English   中英

Selenium 2:在新標簽頁中打開鏈接並關閉標簽頁

[英]Selenium 2: Open link in new tab and close tabs

我希望能夠在Selenium 2中的新選項卡中打開鏈接。此外,我想在完成與頁面的交互時關閉選項卡。 如果我有一個<a>標簽的WebElement ,這怎么可能?

我正在使用Selenium 2的Java API和Firefox 4上運行的Firefox驅動程序。

我找到selenium 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

最好使用selenium我們在sol-logics中將它與java.awt.robot類結合起來。 您可以發送可以關閉瀏覽器窗口的密鑰。 嘗試使用

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

並回答它是否有效

目前,Selenium WebDriver API沒有任何處理標簽的方法。 在我期望看到Java之類的語言綁定中的實現之前,該項目確實需要一組用於管理選項卡的一致的跨瀏覽器方法。 在此之前,您的JavaScript解決方案可能是唯一的方法,並記住您的代碼將負責管理該選項卡的生命周期。

花了一段時間(約2周)來跟蹤正確的命令序列,但這是迄今為止我發現Win7 / Chrome設置在新標簽頁中打開鏈接並切換到新標簽的最簡單方法自動。

警告! 確保始終執行keyUp操作。 如果您無法執行keyUp,系統將按下這些鍵,直到重新啟動或keyUp發生。

Windows 7 / Chrome:

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();

注意:我知道這是一個舊線程,我只想在這里編寫解決方案的目錄,因為我找不到更優雅的解決方案,並希望節省一些時間(希望:)。

編輯:錯字

以下是我使用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);

這使得Robot快速按下並釋放CTRL + W鍵以模擬用戶交互。 如果您只使用keyPress事件,則會關閉WebDriver的所有選項卡和窗口。

希望我能幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM