web-dev-qa-db-ja.com

Selenium 2:新しいタブでリンクを開き、タブを閉じる

Selenium 2の新しいタブでリンクを開くことができるようにしたい。また、ページの操作が終了したらタブを閉じたい。 <a>タグのWebElementがある場合、これはどのように可能ですか?

Firefox4で実行されているFirefoxドライバーでSelenium2のJava APIを使用しています。

13
Alp

現時点では、Selenium WebDriverAPIにはタブを処理する方法がありません。このプロジェクトでは、Javaのような言語バインディングのいずれかで実装が行われることを期待する前に、タブを管理するための一貫したクロスブラウザーのメソッドセットが本当に必要になります。それまでは、JavaScriptソリューションが唯一の方法である可能性があり、コードがそのタブの存続期間を管理する責任があることを忘れないでください。

6
JimEvans

私がSelenium2を理解する方法は、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
7
Henry

seleniumを最高の状態で使用するには、sol-logicsでSeleniumをJava.awt.robotクラスと組み合わせます。ブラウザウィンドウを閉じることができるキーを送信できます。使ってみてください

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

うまくいったら返信してください

6
Ankur Tewari

コマンドの正しいシーケンスを追跡するのにしばらく(〜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();

注:古いスレッドであることはわかっています。よりエレガントなソリューションが見つからず、他の誰かの時間を少し節約したかったので、ここでソリューションをカタログ化したかっただけです(うまくいけば:)。

編集:タイプミス

4
TwoByteHero

これが私がPythonを使ってそれをした方法です。

この解決策は少し汚いですが、タブを閉じたい場合は機能します。

MacのショートカットCMD + Wを模倣してタブを閉じます。ウィンドウを実行している場合は、別のキーの組み合わせを実装する必要があります。

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
Luciano

私が使用しているのは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のすべてのタブとウィンドウが閉じます。

私があなたを助けたことを願っています。

3
UltimateGamer84