如何使用Selenium WebDriver打开新标签?
我想在新标签页中打开多个链接。这是为了尽快完成构建验证任务。因此,在每个新标签中,可以打开所有与烟雾测试相关的链接,然后在每个与烟雾测试要求相对应的标签内,我们可以进行健全性测试。
答案 0 :(得分:7)
代码:
WebDriver wd = new FirefoxDriver();
wd.get("http://www.gmail.com");
wd.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wd.manage().window().maximize();
//To open a new tab
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);
//To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(wd.getWindowHandles());
wd.switchTo().window(tabs.get(1));
//To navigate to new link/URL in 2nd new tab
wd.get("http://facebook.com");
答案 1 :(得分:4)
在新标签页中打开链接的唯一方法是模拟键盘快捷键。以下内容适用于FFX,Chrome&amp; IE
Selenium(目前)在浏览器窗口中没有任何标签概念,所以为了打开标签然后测试它你必须使用选项3.
以下代码将执行选项3.然后立即关闭该新选项卡。 (在C#中)
new Actions(WebDriver)
.KeyDown(Keys.Control)
.KeyDown(Keys.Shift)
.Click(tab)
.KeyUp(Keys.Shift)
.KeyUp(Keys.Control)
.Perform();
new Actions(WebDriver)
.SendKeys(Keys.Control + "w")
.Perform();
你也可以使用:
.MoveToElement(tab)
.Click()
在第一个选项的中间,
.KeyDown(Keys.Control)
.KeyDown("w")
.KeyUp("w")
.KeyUp(Keys.Control)
在第二个。
答案 2 :(得分:2)
/ *在浏览器中打开新标签* /
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));
}
答案 3 :(得分:1)
我们可以使用WebDriver的Actions类。请参阅以下代码:
WebDriver driver = new FirefoxDriver();
driver.get("<provide URL>");
WebElement link = driver.findElement(locator);
Actions builder = new Actions(driver);
Action openLinkInNewTab = builder
.moveToElement(link)
.sendKeys(link, Keys.CONTROL)
.click(link)
.keyUp(Keys.CONTROL)
.build();
openLinkInNewTab.perform();
这可以为多个链接循环。
答案 4 :(得分:1)
<?php
include('lib/conn_sqli.php');
// include ('lib/conn.php'); COMMENT THIS OUT OR REMOVE THIS
$total_duration = $_POST['total_duration'];
$desc_duration = $_POST['desc_duration'];
if($stmt = $db->prepare("INSERT INTO duration (total_duration, desc_duration) VALUES (?, ?)")){
$stmt->bind_param("ss", $total_duration, $desc_duration);
$stmt->execute();
$stmt->close();
echo ("succeed");
}
?>
此示例取自THIS BLOG POST
答案 5 :(得分:0)
// To open a new tab to establish second player connection
((JavascriptExecutor)driver).executeScript("window.open('about:blank', '-blank')");
// To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
// To navigate to new link/URL in 2nd new tab
driver.get("http://localhost:8080");
我这样做了,它完美无缺!
答案 6 :(得分:0)
在第一个解决方案中,添加Thread.sleep(5000)语句。直到我添加了sleep语句,我才多次出现错误索引错误。
WebDriver wd = new FirefoxDriver();
wd.get("http://www.gmail.com");
wd.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wd.manage().window().maximize();
//To open a new tab
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);
try {Thread.sleep(5000);} catch (InterruptedException e) {}
//To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(wd.getWindowHandles());
wd.switchTo().window(tabs.get(1));
//To navigate to new link/URL in 2nd new tab
wd.get("http://facebook.com");
答案 7 :(得分:-1)
以上解决方案对我不起作用。不知道为什么,但是驱动程序会导航到新的网址,但新的标签只是不会打开。
我终于设法使用以下代码打开新标签:
IWebDriver driver = new ChromeDriver("path for chromedriver.exe");
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
driver.Navigate().GoToUrl("url1");
js.ExecuteScript("window.open()");
driver.SwitchTo().Window(driver.WindowHandles[driver.WindowHandles.Count - 1]);
driver.Navigate().GoToUrl("url2");
driver.WindowHandles.Count - 1
将为您提供最后打开的标签,即此方案中的新标签。希望这可以帮助别人。