Selenium WebDriver (diğer adıyla Selenium 2) kullanarak mevcut Firefox tarayıcısında yeni bir sekme nasıl açılır?
Selenium WebDriver (diğer adıyla Selenium 2) kullanarak mevcut Firefox tarayıcısında yeni bir sekme nasıl açılır?
Yanıtlar:
Aşağıdaki kod, bağlantıyı yeni Sekmede açacaktır.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Aşağıdaki kod boş yeni Sekme açacaktır.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, birçok platformda / tarayıcıda çalışmasını bekleyebilirsiniz.
Ruby / Python / C # bağlamalarında (Selenium 2.33.0) bir yanıt arayan herkes için.
Gönderilecek gerçek anahtarların işletim sisteminize bağlı olduğunu unutmayın; örneğin COMMAND + t
, bunun yerine Mac kullanır CONTROL + t
.
yakut
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
piton
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();
}
}
}
driver.switchTo().window(windowName);
herhangi bir sekmeye veya pencereye erişmeniz gerekir . Açıkçası, aralarında geçişe izin vermek için pencere adlarını normal şekilde takip etmeniz gerekir.
Neden bunu yapmıyorsun
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
JavascriptExecutor kullanarak yeni sekme açmak için,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Sekmeyi dizine göre kontrol edecek:
driver.switchTo().window(tabs.get(1));
Ana sekmede sürücü kontrolü:
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));
, Bunu denedim ama dizi istisnadan çıktı, herhangi bir çözüm biliyorsanız lütfen bana bildirin.
driver.switchTo().window(tabs.get(2));
, Bu iyi çalışıyor ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
ancak pencerelere geçmek için herhangi bir kontrolüm olmayacak.
Chrome Sürücüsünde yeni pencere açmak için.
//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 ile Java kullanarak aşağıdaki kodu kullanabilirsiniz:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
JavaScript kullanarak:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Yeni sekmeyi açtıktan sonra o sekmeye geçmesi gerekir:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Bunu FireFox tarayıcısı için deneyin.
/* 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));
}
Aşağıdaki kod bağlantıyı yeni pencerede açacaktır
String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
WebDriver artık sekmeleri açma desteğine sahiptir:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Yeni bir sekme açacak. Bir pencere açmak aslında standart olmayan bir durum haline geldi:
browser.manage.new_window(:window)
Sekme veya pencere otomatik olarak odaklanmayacaktır. Geçiş yapmak için:
browser.switch_to.window new_tab
Selenium WebDriver kullanarak mevcut Chrome tarayıcısında yeni bir sekme açmak için bu kodu kullanabilirsiniz:
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);
Bir süredir Chrome'da yeni bir sekme açarken sorun yaşadım. Hattadriver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Benim için çalışmadı.
Selenyumun sürücüye odaklanmasının yeterli olmadığını öğrendim, Windows da pencerenin önünde olmalı.
Çözümüm, pencereyi öne çıkaracak ve ardından komutu çalıştıracak bir krom uyarısı başlatmaktı. basit kod:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Selenium 2.52.0'ı Java ve Firefox 44.0.2'de kullanıyorum. Ne yazık ki yukarıdaki çözümlerin hiçbiri benim için işe yaramadı. Sorun şu ki, bir driver.getWindowHandles () 'ı çağırırsam, her zaman 1 tek tutamaç elde ederim. Firefox tek bir işlem olduğundan ve her sekme ayrı bir işlem olmadığından, bu bir şekilde bana mantıklı geliyor. Ama belki yanılıyorum. Her neyse, kendi çözümümü yazmaya çalışıyorum:
// 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);
Yeni bir sekme açmak için Ctrl + t kombinasyonunu, kapatmak için Ctrl + w ve orijinal sekmeye geri dönmek için Ctrl + 1 (ilk sekme) kullandım. Çözümümün mükemmel veya hatta iyi olmadığının farkındayım ve ayrıca şoförün arama anahtarıyla da geçiş yapmak istiyorum, ancak yazdığım gibi tek bir tutacağım olduğu için bu mümkün değildi. Belki bu, aynı duruma sahip birine yardımcı olacaktır.
Selenium WebDriver for Java ile Chrome kullanarak yeni bir sekme nasıl açılır?
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);
Yukarıdaki kod ilk uzantıları devre dışı bırakacak ve robot sınıfını kullanarak yeni sekme açılacaktır.
Bu kod satırı, selenium webdriver kullanarak yeni bir tarayıcı sekmesi açacaktır
((JavascriptExecutor)getDriver()).executeScript("window.open()");
* JAVA
Kullanmanızı tavsiye ederim JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
İçe aktarmanın ardından:
import org.openqa.selenium.JavascriptExecutor;
Yeni bir nasıl açılır, ama daha da önemlisi, bu yeni sekmede işleri nasıl yaparsınız? Webdriver, her sekme için yeni bir WindowHandle eklemez ve yalnızca ilk sekmenin kontrolüne sahiptir. Bu nedenle, yeni bir sekme (Control + Sekme Numarası) seçtikten sonra sürücüde .DefaultContent () öğesini, üzerinde çalışacağınız sekme olarak görünür sekmeyi tanımlamak için ayarlayın.
Visual Basic
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();
Birden çok sekmenin nasıl açılacağını ve sekmeler arasında nasıl geçiş yapılacağını ve sonunda tüm sekmelerin nasıl kapatılacağını anlamak için bu eksiksiz örneği kontrol edin
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);
} }
Bu örnek bu web sayfası tarafından verilmiştir
Https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465'teki hata nedeniyle webdriver.switch Aslında sekmeler arasında geçiş yapmak için, odak ilk sekmede bırakılır. SwitchWindow'dan sonra bir driver.get yaparak bunu doğrulayabilir ve ikinci sekmenin orijinal sekmeye değil aslında yeni URL'ye gittiğini görebilirsiniz.
Şimdilik geçici çözüm, @ yardening2'nin önerdiği şeydir. Bir uyarıyı açmak için js kullanın ve ardından bunu kabul etmek için webdriver kullanın.
Benim için çalışan bu kod (selenyum 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();
}
Soru : Java ile Selenium WebDriver kullanarak yeni bir sekme nasıl açılır?
Cevap : Herhangi bir bağlantıya tıkladıktan sonra yeni sekmeyi açın.
Yeni açılan sekmeyi ele almak istiyorsak, sekmeyi .switchTo (). Window () komutunu kullanarak işlememiz gerekir.
Belirli bir sekmeye geçin, ardından işlemi gerçekleştirin ve ana sekmeye geri dönün.
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));
}
}
Yeni sekmeyi açmak istiyorsanız bunu kullanabilirsiniz.
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Bağlantıyı yeni sekmeden açmak istiyorsanız bunu kullanabilirsiniz.
JavascriptExecutor ile:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
Eylemlerle:
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 kullanarak tarayıcı penceresini kullanma:
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