如何使用Selenium WebDriver(又名Selenium 2)在现有的Firefox浏览器中打开新标签页?
如何使用Selenium WebDriver(又名Selenium 2)在现有的Firefox浏览器中打开新标签页?
Answers:
以下代码将在新标签页中打开链接。
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#绑定中寻求答案的任何人(硒2.33.0)。
请注意,实际发送的密钥取决于您的操作系统,例如Mac使用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()
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);
访问任何选项卡或窗口。显然,您需要像往常一样跟踪窗口名称,以便在它们之间进行切换。
ActionChains(driver).key_down(Keys.CONTROL).click(element_to_be_clicked).key_up(Keys.CONTROL).perform()
。该ActionChains从进口selenium.webdriver.common.action_chains
。
为什么不这样做
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');");
但我没有任何控件可以切换到Windows。
在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);
您可以将Java代码与Selenium WebDriver结合使用,以使用以下代码:
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));
在FireFox浏览器上尝试此操作。
/* 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
要使用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);
我暂时无法在Chrome中打开新标签页。甚至driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
没有为我工作。
我发现,硒仅专注于驱动程序是不够的,Windows还必须将窗口置于最前面。
我的解决方案是在chrome上调用警报,该警报会将窗口置于最前面,然后执行命令。样例代码:
((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()我总是得到1个单柄。在某种程度上,这对我来说很有意义,因为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调用进行切换,但是正如我写的那样,因为我只有一个句柄,所以这是不可能的。也许这对同样情况的人会有帮助。
如何使用Selenium WebDriver和Java for chrome打开新标签页?
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()");
如何打开一个新的但更重要的是,您如何在该新选项卡中执行操作?Webdriver不会为每个选项卡添加新的WindowHandle,而只能控制第一个选项卡。因此,在选择了一个新的选项卡(Control + Tab Number)之后,在驱动程序上设置.DefaultContent()以将可见选项卡定义为您要使用的选项卡。
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();
查看此完整示例,了解如何打开多个选项卡并在选项卡之间切换,最后关闭所有选项卡
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接受警报。
此代码对我有用(硒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));
}
}
如果要打开新标签,可以使用此标签
((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