Java에서 Selenium WebDriver를 사용하여 새 탭을 여는 방법
Selenium WebDriver(일명 Selenium WebDriver)를 사용하여 기존 Firefox 브라우저에서 새 탭을 열려면 어떻게 해야 합니까?셀레늄 2) (자바어)
Ruby, Python 및 C# 바인딩(Selenium 2.33.0)에서 답을 찾고 있는 다른 사용자를 위한 것입니다.
송신하는 실제의 키는, OS 에 의해서 다릅니다.예를 들어 Mac에서는 + 대신 + 를 사용합니다.
루비
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()
C#
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();
}
}
}
다음 코드는 새 탭에서 링크를 엽니다.
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);
왜 이렇게 안 해?
driver.ExecuteScript("window.open('your url','_blank');");
Javascript를 사용하여 새 탭을 열려면실행자,
((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));
Java 와 Selenium Web Driver 를 사용하면, 다음의 코드를 사용할 수 있습니다.
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
JavaScript 사용 시:
WebDriver driver = new FirefoxDriver(); // Firefox 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));
Chrome Driver에서 새 창을 열려면
// 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);
파이어폭스 브라우저로 시험해 보세요.
/* Open new tab in browser */
public void openNewTab()
{
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(0));
}
여기 있는 거의 모든 답변이 최신이 아닙니다.
(루비 예시)
WebDriver 에서는, 다음의 탭을 여는 것을 서포트하고 있습니다.
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
새 탭을 엽니다.창을 여는 것은 실제로는 표준이 아닌 경우가 되었습니다.
browser.manage.new_window(:window)
탭 또는 창의 포커스는 자동으로 표시되지 않습니다.전환 방법:
browser.switch_to.window new_tab
> = 4. 또는 selenium > = 4.0 현 javascript 또 javascript 또 javascript 또 ascript ascript 、 javascript = 필 필 필 as as as as as as as as send_keys
는 Selenium 4라는 새로운 API를 제공합니다.newWindow
새 창(또는 탭)을 만들고 자동으로 전환할 수 있습니다.새 창 또는 탭은 동일한 세션에서 생성되므로 새 WebDriver 개체를 만들지 않습니다.
파이썬
새 탭 열기
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.window import WindowTypes
driver.switch_to.new_window(WindowTypes.TAB)
새 창 열기
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.window import WindowTypes
driver.switch_to.new_window(WindowTypes.WINDOW)
자바
새 창 열기
driver.get("https://www.google.com/");
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.WINDOW);
// Opens LambdaTest homepage in the newly opened window
driver.navigate().to("https://www.lambdatest.com/");
새 탭 열기
driver.get("https://www.google.com/");
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.TAB);
// Opens LambdaTest homepage in the newly opened tab
driver.navigate().to("https://www.lambdatest.com/")
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);
다음 코드는 새 창에 링크를 엽니다.
String selectAll = Keys.chord(Keys.SHIFT, Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
Google Chrome에서 새 탭을 여는 데 한동안 어려움이 있었습니다.
지어도.driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
나한테는 통하지 않았어
셀레늄이 운전자에 집중하는 것만으로는 부족하다는 것을 알게 되었습니다.윈도우는 또한 전면에 윈도우가 있어야 한다.
제 해결책은 Chrome에서 경고를 호출하여 창을 앞으로 가져와서 명령을 실행하는 것이었습니다.샘플 코드:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
// To open a new tab in an existing window
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
어떻게 하면 새 탭을 열 수 있을까요? 더 중요한 것은 어떻게 하면 새 탭을 열 수 있을까요?
Webdriver는 각 탭에 새로운 WindowHandle을 추가하지 않고 첫 번째 탭만 제어할 수 있습니다.따라서 새 탭(Control + Tab Number)을 선택한 후 설정합니다.드라이버의 Default Content()를 사용하여 작업하는 탭으로 표시되는 탭을 정의합니다.
비주얼 베이직
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()
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);
+ 조합을 사용하여 새 탭을 열고 +를 닫은 후 원래 사용하던 탭 +(첫 번째 탭)로 전환했습니다.
제 솔루션이 완벽하지 않거나 심지어 좋지 않다는 것을 알고 있으며, 드라이버 스위치로 콜을 전환하고 싶습니다만, 제가 쓴 것처럼 핸들이 하나밖에 없었기 때문에 가능하지 않았습니다.아마 이것은 같은 상황에 있는 사람에게 도움이 될 것이다.
Java for Chrome 탑재 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);
위의 코드를 사용하면 첫 번째 확장이 비활성화되고 로봇 클래스를 사용하면 새 탭이 열립니다.
다음 코드 행은 Selenium WebDriver를 사용하여 새로운 브라우저 탭을 엽니다.
((JavascriptExecutor)getDriver()).executeScript("window.open()");
자바
다음을 사용할 것을 권장합니다.
- 새 빈 창 열기:
((JavascriptExecutor) driver).executeScript("window.open()");
- 특정 URL을 사용하여 새 창을 엽니다.
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
다음 Import:
import org.openqa.selenium.JavascriptExecutor;
여러 탭을 열고 탭 사이를 전환하고 마지막에 모든 탭을 닫는 방법을 이해하려면 이 전체 예를 확인하십시오.
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 the first tab
switchToTab();
// Call switchToTab() method to switch to the second 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://google.com
- 중
facebook
와 ""를 .facebook
URL
- ★★★
facebook
다른 탭으로 이동합니다.
솔루션 #1: 사용방법window handles
.
driver = new ChromeDriver(options);
driver.get("https://www.google.com/search?q=facebook");
String facebookUrl = driver.findElement(By.xpath("(//a[contains(@href,'facebook.com')])[1]")).getAttribute("href");
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
driver.get(facebookUrl);
솔루션 2: 신규 작성에 의한driver
안 요.이치노
driver = new ChromeDriver(options);
driver.get("https://www.google.com/search?q=facebook");
String facebookUrl = driver.findElement(By.xpath("(//a[contains(@href,'facebook.com')])[1]")).getAttribute("href");
/*Create an another instance of driver.*/
driver = new ChromeDriver(options);
driver.get(facebookUrl);
해결책 3: 셀레늄 4 사용
driver.get("https://www.google.com/search?q=facebook");
String facebookUrl = driver.findElement(By.xpath("(//a[contains(@href,'facebook.com')])[1]")).getAttribute("href");
driver.switchTo().newWindow(WindowType.TAB);
driver.navigate().to(facebookUrl);
Selenium WebDriver를 사용하여 기존 Firefox 브라우저에서 새 탭을 열려면
FirefoxDriver driver = new FirefoxDriver();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t");
Actions at=new Actions(wd);
at.moveToElement(we);
at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(0));
Node.js에서도 같은 예를 나타냅니다.
var webdriver = require('selenium-webdriver');
...
driver = new webdriver.Builder().
withCapabilities(capabilities).
build();
...
driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");
이 코드는 나에게 유효합니다(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();
}
질문:Java에서 Selenium WebDriver를 사용하여 새 탭을 열려면 어떻게 해야 합니까?
답변: 링크를 클릭한 후 새 탭을 엽니다.
새로 열린 탭을 처리하려면 .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));
}
}
Selenium은 새로운 탭을 여는 것을 지원하지 않습니다.새 창 열기만 지원합니다.모든 면에서 새 창은 기능적으로 새 탭과 동일합니다.
이 문제에 대처하는 데는 여러 가지 방법이 있지만, 장기적으로는 다른 문제를 일으킬 것입니다.
새 탭을 열려면 다음을 사용할 수 있습니다.
((JavascriptExecutor) getDriver()).executeScript("window.open()");
새 탭에서 링크를 열려면 다음을 사용하십시오.
Javascript 사용실행자:
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();
webdriver.switchTo가 실제로 스위치탭을 실행하려면 첫 번째 탭에 포커스가 남습니다.
이를 확인하려면 driver.get을 switchWindow 뒤에 붙이면 두 번째 탭이 원래 탭이 아닌 새 URL로 이동하는 것을 확인할 수 있습니다.
현재 회피책은 yardening2가 제안한 것입니다.JavaScript 코드를 사용하여 경보를 연 다음 웹 드라이버를 사용하여 경보를 수락합니다.
다음 스니펫을 사용하여 새 탭에서 링크를 여십시오.
public void openLinkInNewTab(String link){
String currentHandle = driver().getWindowHandle();
((JavascriptExecutor) driver()).executeScript("window.open()");
//getting all the handles currently available
Set<String> handles = driver().getWindowHandles();
for (String actual : handles) {
if (!actual.equalsIgnoreCase(currentHandle)) {
//switching to the opened tab
driver().switchTo().window(actual);
//opening the URL saved.
driver.get(link);
}
}
}
언급URL : https://stackoverflow.com/questions/17547473/how-to-open-a-new-tab-using-selenium-webdriver-in-java
'programing' 카테고리의 다른 글
MySQL의 Force Index - 어디에 배치해야 합니까? (0) | 2022.11.26 |
---|---|
spring restTemplate를 사용한 REST API 기본 인증 (0) | 2022.11.26 |
새 창에서 열린 하위 구성 요소 (0) | 2022.11.26 |
인덱스를 사용하지만 테이블 스캔처럼 보이는 MariaDB SELECT (0) | 2022.11.26 |
spring-data-jpa를 사용하여 엔티티를 갱신하려면 어떻게 해야 합니까? (0) | 2022.11.26 |