Selenium WebDriver (일명 Selenium 2)를 사용하여 기존 Firefox 브라우저에서 새 탭을 여는 방법은 무엇입니까?
Selenium WebDriver (일명 Selenium 2)를 사용하여 기존 Firefox 브라우저에서 새 탭을 여는 방법은 무엇입니까?
답변:
아래 코드는 새 탭에서 링크를 엽니 다.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
아래 코드는 빈 새 탭을 엽니 다.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
하면 많은 플랫폼 / 브라우저에서 작동 할 것으로 예상 할 수 있습니다.
Ruby / Python / C # 바인딩 (Selenium 2.33.0)에서 답을 찾고있는 다른 사람을위한 것입니다.
전송의 실제 키는 예를 들어, 맥 사용을 위해, 당신의 OS에 따라 달라집니다 COMMAND + t
대신, CONTROL + t
.
루비
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
driver.get('http://stackoverflow.com/')
body = driver.find_element(:tag_name => 'body')
body.send_keys(:control, 't')
driver.quit
파이썬
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")
body = driver.find_element_by_tag_name("body")
body.send_keys(Keys.CONTROL + 't')
driver.close()
씨#
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
namespace StackOverflowTests {
class OpenNewTab {
static void Main(string[] args) {
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://stackoverflow.com/");
IWebElement body = driver.FindElement(By.TagName("body"));
body.SendKeys(Keys.Control + 't');
driver.Quit();
}
}
}
driver.switchTo().window(windowName);
탭이나 창에 액세스하기 만하면됩니다. 분명히 창 이름을 정상적으로 추적하여 전환 할 수 있도록해야합니다.
왜 안돼
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
JavascriptExecutor를 사용하여 새 탭을 열려면,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
색인에 따라 탭에서 제어합니다.
driver.switchTo().window(tabs.get(1));
메인 탭의 드라이버 컨트롤 :
driver.switchTo().window(tabs.get(0));
driver.switchTo().window(tabs.get(1)); driver.get("https://www.stackoverflow.com"); Thread.sleep(2000); driver.switchTo().window(tabs.get(2)); driver.get("https://www.flipkart.com"); Thread.sleep(2000); driver.close(); driver.switchTo().window(tabs.get(1)); Thread.sleep(2000); driver.close(); driver.switchTo().window(tabs.get(0));
, 나는 이것을 시도했지만 배열 예외를 벗어났습니다. 어떤 해결책을 안다면 알려주십시오.
driver.switchTo().window(tabs.get(2));
에서는 잘 작동 ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
하지만 창으로 전환 할 컨트롤이 없습니다.
Chrome 드라이버에서 새 창을 열려면.
//The script that will will open a new blank window
//If you want to open a link new tab, replace 'about:blank' with a link
String a = "window.open('about:blank','_blank');";
((JavascriptExecutor)driver).executeScript(a);
Selenium WebDriver와 함께 Java를 사용하여 다음 코드를 사용할 수 있습니다.
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
JavaScript를 사용하여 :
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
새 탭을 연 후 해당 탭으로 전환해야합니다.
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Selenium WebDriver를 사용하여 기존 Chrome 브라우저에서 새 탭을 열려면 다음 코드를 사용할 수 있습니다.
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
string newTabInstance = driver.WindowHandles[driver.WindowHandles.Count-1].ToString();
driver.SwitchTo().Window(newTabInstance);
driver.Navigate().GoToUrl(url);
한동안 크롬에서 새 탭을 여는 데 문제가있었습니다. 심지어 driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
나를 위해 작동하지 않았다.
나는 셀레늄이 드라이버에 초점을 맞추는 것만으로는 충분하지 않다는 것을 알았습니다. 윈도우도 전면에 창을 가져야합니다.
내 해결책은 창을 맨 앞으로 가져오고 명령을 실행하는 크롬에 대한 경고를 호출하는 것이 었습니다. 샘플 코드 :
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Java 및 Firefox 44.0.2에서 Selenium 2.52.0을 사용하고 있습니다. 불행히도 위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 문제는 내가 driver.getWindowHandles ()를 호출하면 항상 하나의 단일 핸들을 얻는 것입니다. Firefox는 단일 프로세스이고 각 탭이 별도의 프로세스가 아니기 때문에 어떻게 든 이것은 나에게 의미가 있습니다. 하지만 내가 틀렸을 수도 있습니다. 어쨌든 내 자신의 솔루션을 작성하려고합니다.
// open a new tab
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
//url to open in a new tab
String urlToOpen = "https://url_to_open_in_a_new_tab";
Iterator<String> windowIterator = driver.getWindowHandles()
.iterator();
//I always get handlesSize == 1, regardless how many tabs I have
int handlesSize = driver.getWindowHandles().size();
//I had to grab the original handle
String originalHandle = driver.getWindowHandle();
driver.navigate().to(urlToOpen);
Actions action = new Actions(driver);
// close the newly opened tab
action.keyDown(Keys.CONTROL).sendKeys("w").perform();
// switch back to original
action.keyDown(Keys.CONTROL).sendKeys("1").perform();
//and switch back to the original handle. I am not sure why, but
//it just did not work without this, like it has lost the focus
driver.switchTo().window(originalHandle);
Ctrl + t 조합을 사용하여 새 탭을 열고 Ctrl + w를 사용하여 닫고 원래 탭으로 다시 전환하려면 Ctrl + 1 (첫 번째 탭)을 사용했습니다. 나는 내 솔루션이 완벽하지 않거나 심지어 좋지 않다는 것을 알고 있으며 운전자의 switchTo 호출로 전환하고 싶지만 내가 쓴대로 핸들이 하나 밖에 없었기 때문에 불가능했습니다. 아마도 이것은 같은 상황을 가진 사람에게 도움이 될 것입니다.
Chrome 용 Java와 함께 Selenium WebDriver를 사용하여 새 탭을 여는 방법은 무엇입니까?
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.navigate().to("https://google.com");
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_T);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_T);
위의 코드는 첫 번째 확장을 비활성화하고 로봇 클래스를 사용하면 새 탭이 열립니다.
이 코드 줄은 셀레늄 웹 드라이버를 사용하여 새 브라우저 탭을 엽니 다.
((JavascriptExecutor)getDriver()).executeScript("window.open()");
새 탭을 여는 방법,하지만 더 중요한 것은 새 탭에서 작업하는 방법입니다. Webdriver는 각 탭에 대해 새 WindowHandle을 추가하지 않으며 첫 번째 탭만 제어합니다. 따라서 새 탭 (Control + Tab Number)을 선택한 후 드라이버에서 .DefaultContent ()를 설정하여 작업 할 탭으로 표시되는 탭을 정의합니다.
비주얼 베이직
Dim driver = New WebDriver("Firefox", BaseUrl)
' Open new tab - send Control T
Dim body As IWebElement = driver.FindElement(By.TagName("body"))
body.SendKeys(Keys.Control + "t")
' Go to a URL in that tab
driver.GoToUrl("YourURL")
' Assuming you have m tabs open, go to tab n by sending Control + n
body.SendKeys(Keys.Control + n.ToString())
' Now set the visible tab as the drivers default content.
driver.SwitchTo().DefaultContent()
Actions at=new Actions(wd);
at.moveToElement(we);
at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
이 전체 예제를 확인하여 여러 탭을 열고 탭 사이를 전환하고 마지막에 모든 탭을 닫는 방법을 이해하십시오.
public class Tabs {
WebDriver driver;
Robot rb;
@BeforeTest
public void setup() throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Anuja.AnujaPC\\Downloads\\chromedriver_win32\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("http://qaautomated.com");
}
@Test
public void openTab() {
//Open tab 2 using CTRL + t keys.
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//Open URL In 2nd tab.
driver.get("http://www.qaautomated.com/p/contact.html");
//Call switchToTab() method to switch to 1st tab
switchToTab();
//Call switchToTab() method to switch to 2nd tab.
switchToTab();
}
public void switchToTab() {
//Switching between tabs using CTRL + tab keys.
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
//Switch to current selected tab's content.
driver.switchTo().defaultContent();
}
@AfterTest
public void closeTabs() throws AWTException {
//Used Robot class to perform ALT + SPACE + 'c' keypress event.
rb =new Robot();
rb.keyPress(KeyEvent.VK_ALT);
rb.keyPress(KeyEvent.VK_SPACE);
rb.keyPress(KeyEvent.VK_C);
} }
이 예제는 이 웹 페이지에서 제공합니다.
https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465의 버그로 인해 webdriver.switchTo가 실제로 탭을 전환하더라도 포커스는 첫 번째 탭에 남아 있습니다. switchWindow 다음에 driver.get을 수행하여이를 확인할 수 있으며 두 번째 탭이 실제로 원래 탭이 아닌 새 URL로 이동하는 것을 확인할 수 있습니다.
현재 해결 방법은 @ yardening2가 제안한 것입니다. js를 사용하여 경고를 연 다음 webdriver를 사용하여 수락하십시오.
이 코드는 나를 위해 작동합니다 (selenium 3.8.1, chromedriver = 2.34.522940, chrome = 63.0) :
public void openNewTabInChrome() {
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.linkText("Gmail"));
Actions actionOpenLinkInNewTab = new Actions(driver);
actionOpenLinkInNewTab.moveToElement(element)
.keyDown(Keys.CONTROL) // MacOS: Keys.COMMAND
.keyDown(Keys.SHIFT).click(element)
.keyUp(Keys.CONTROL).keyUp(Keys.SHIFT).perform();
ArrayList<String> tabs = new ArrayList(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
driver.get("http://www.yahoo.com");
//driver.close();
}
질문 : Selenium WebDriver with Java를 사용하여 새 탭을 여는 방법은 무엇입니까?
대답 : 링크를 클릭 한 후 새 탭을 엽니 다.
새로 열린 탭을 처리하려면 .switchTo (). window () 명령을 사용하여 탭을 처리해야합니다.
특정 탭으로 전환 한 다음 작업을 수행하고 상위 탭으로 다시 전환합니다.
package test;
import java.util.ArrayList;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Tab_Handle {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "geckodriver_path");
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com");
// Store all currently open tabs in Available_tabs
ArrayList<String> Available_tabs = new ArrayList<String>(driver.getWindowHandles());
// Click on link to open in new tab
driver.findElement(By.id("Url_Link")).click();
// Switch newly open Tab
driver.switchTo().window(Available_tabs.get(1));
// Perform some operation on Newly open tab
// Close newly open tab after performing some operations.
driver.close();
// Switch to old(Parent) tab.
driver.switchTo().window(Available_tabs.get(0));
}
}
새 탭을 열려면 이것을 사용할 수 있습니다.
((JavascriptExecutor) getDriver()).executeScript("window.open()");
새 탭에서 링크를 열려면 이것을 사용할 수 있습니다.
JavascriptExecutor 사용 :
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
작업 포함 :
WebElement element = driver.findElement(By.xpath("your_xpath"));
Actions actions = new Actions(driver);
actions.keyDown(Keys.LEFT_CONTROL)
.click(element)
.keyUp(Keys.LEFT_CONTROL)
.build()
.perform();
Selenium Webdriver를 사용하여 브라우저 창 처리 :
String winHandleBefore = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()) // Switch to new opened window
{
driver.switchTo().window(winHandle);
}
driver.switchTo().window(winHandleBefore); // move to previously opened window