web-dev-qa-db-ja.com

Selenium WebDriverを使用して新しいタブ(クロム)でリンクを開く方法

System.setProperty("webdriver.chrome.driver", "D:\\softwares\\chromedriver_win32\\chromedriver.exe");

WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://mail.google.com/");
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); 
driver.findElement(By.linkText("www.facebook.com")).sendKeys(selectLinkOpeninNewTab);

新しいタブは開いていますが、URLリンクは開いていません。

12
nlogn

私は以下のコードでチェックしましたが、それは私のためにうまく機能します。 here から答えを見つけました。

    driver = new ChromeDriver();
    driver.manage().window().maximize();

    baseUrl = "http://www.google.co.uk/";
    driver.get(baseUrl);
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");

    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1)); //switches to new tab
    driver.get("https://www.facebook.com");

    driver.switchTo().window(tabs.get(0)); // switch back to main screen        
    driver.get("https://www.news.google.com");
13
Abdul Hameed

以下のコードは、Selenium 3およびchromeバージョン58で機能します。

    WebDriver driver = new ChromeDriver();
    driver.get("http://yahoo.com");  
    ((JavascriptExecutor)driver).executeScript("window.open()");
    ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    driver.get("http://google.com");
25
nur

私は他の手法を試しましたが、どれも機能せず、エラーも発生しませんでしたが、以下のコードを使用するとうまくいきました。

((JavascriptExecutor)driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
driver.get("http://google.com");
9
Ziaullah

リンク要素を取得できる場合、これを使用できます。また、開いたタブに移動します。

WebElement link= driver.findElement(By.tagname("a"));  
String keyString =   Keys.CONTROL+Keys.SHIFT.toString()+Keys.ENTER.toString());
link.sendKeys(keyString);
2
user2117229

以下のコードを使用して、C#Seleniumを使用してブラウザーで新しいタブを開きました。

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

js.ExecuteScript("window.open();");
1
mani kandan

最初にキーを使用して空の新しいタブを開きます Ctrl + t そして、 .get() を使用して、必要なURLを取得します。コードは次のようになります-

_String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.tagName("body")).sendKeys(selectLinkOpeninNewTab);

driver.get("www.facebook.com");
_

現在のビューのリンクを新しいタブで開きたい場合は、上記で記述したコードを使用できます。 By.linkText()の代わりに、適切な By セレクタクラスを使用してWeb要素を選択するようにしてください。

1
JRodDynamite

Seleniumは、ブラウザのWebElementsでのみ自動化できます。新しいタブを開くことは、スタンドアロンアプリケーションであるwebBrowserで実行される操作です。これを行うために、Java.util。*パッケージのRobotクラスを使用できます。このクラスは、アプリケーションのタイプに関係なく、キーボードを使用して操作を実行できます。そのため、操作のコードは次のとおりです。 ロボットクラスを使用してスタンドアロンアプリケーションを自動化することはできませんが、キーボードまたはマウスの操作は実行できます

System.setProperty("webdriver.chrome.driver","softwares\\chromedriver_win32\\chromedriver.exe"); 
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("http://www.google.com");
Robot rob = new Robot();
rob.keyPress(keyEvent.VK_CONTROL);
rob.keyPress(keyEvent.VK_T);
rob.keyRelease(keyEvent.VK_CONTROL);
rob.keyRelease(keyEvent.VK_T);

このステップの後、新しいタブに切り替えるウィンドウイテレータが必要になります。

Set <String> ids = driver.getWindowHandles();
Iterator <String> it = ids.iterator();
String currentWindow = it.next();
String newWindow = it.next();
driver.switchTo().window(newWindow);
driver.findElement(By.linkText("www.facebook.com")).sendKeys(selectLinkOpeninNewTab);
0
Gaurav Thantry