it-swarm.dev

كيفية فتح علامة تبويب جديدة باستخدام Webenriver Selenium؟

كيفية فتح علامة تبويب جديدة في متصفح Firefox الحالي باستخدام Selenium WebDriver (a.k.a. Selenium 2)؟

87
Bhakti Shah

سيفتح الرمز أدناه الرابط في علامة تبويب جديدة.

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);
41
Nagaraju Jampani

فقط لأي شخص آخر يبحث عن إجابة في روابط 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();
        }
    }
}
78
Yi Zeng

لماذا لا تفعل هذا

driver.ExecuteScript("window.open('your url','_blank');");
24
kernowcode

لفتح نافذة جديدة في 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);

للتبديل بين علامات التبويب ، اقرأ هنا

7
Junaid Khan

يمكنك استخدام الكود التالي باستخدام 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()");
6
Ripon Al Wasim

جرب هذا لمتصفح فايرفوكس.

/*  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));
}
5
Prasanth RJ

لفتح علامة تبويب جديدة باستخدام 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));
3
Ishita Shah

أدناه رمز سيفتح الرابط في نافذة جديدة

String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
3
Nagaraju Jampani

لفتح علامة تبويب جديدة في متصفح Chrome الحالي باستخدام Selenium WebDriver ، يمكنك استخدام هذا الكود:

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);
2
user2000197

واجهت مشكلة في فتح علامة تبويب جديدة في 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");
2
yardening2
//to open new tab in existing window
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
1
mahi

أنا أستخدم Selenium 2.52.0 في Java و Firefox 44.0.2. لسوء الحظ ، لم يعمل أي من الحلول المذكورة أعلاه المشكلة هي إذا تلقيت مكالمة 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 الخاصة بالسائق ، ولكن كما كتبت ، لم يكن ذلك ممكنًا لأن لديّ مؤشرًا واحدًا فقط. ربما سيكون هذا مفيدًا لشخص لديه نفس الموقف.

1
Gico

كيفية فتح علامة تبويب جديدة باستخدام 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);

سيؤدي الرمز أعلاه إلى تعطيل الامتدادات الأولى وسيتم فتح علامة تبويب جديدة لفئة الروبوت.

1
Nikhil Shah

هذا الرمز يعمل من أجلي (السيلينيوم 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();
}
0
Giang Phan

سؤال : كيفية فتح علامة تبويب جديدة باستخدام WebDriver Selenium مع جافا؟

الإجابة : بعد النقر على أي رابط افتح علامة تبويب جديدة.

إذا كنا نريد التعامل مع علامة التبويب المفتوحة حديثًا ، فعلينا معالجة علامة التبويب باستخدام .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));

    }

}
0
sandeep shewale

لا يدعم السيلينيوم فتح علامات تبويب جديدة ، بل يدعم فقط فتح نوافذ جديدة. بالنسبة لجميع الأغراض ، يكون الغرض من وجود نافذة جديدة مكافئ وظيفيًا لعلامة تبويب جديدة على أي حال.

هناك العديد من الاختراقات لحل المشكلة لكنهم سوف يتسببون في مشاكل أخرى على المدى الطويل.

0
Ardesco

حدد هذا المثال الكامل لفهم كيفية فتح علامات تبويب متعددة والتبديل بين علامات التبويب وفي النهاية أغلق جميع علامات التبويب

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);
 } }

يتم تقديم هذا المثال بواسطة صفحة الويب هذه

0
anuja jain

لفتح علامة تبويب جديدة في متصفح Firefox الحالي باستخدام Selenium WebDriver

FirefoxDriver driver = new FirefoxDriver();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t"); 
0
vickisys
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());

driver.switchTo().window(tabs.get(0));
0
Rajan.M
 Actions at=new Actions(wd);
 at.moveToElement(we);
 at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
0
Alex Mathew

نفس المثال للعقدة:

var webdriver = require('Selenium-webdriver');
...
driver = new webdriver.Builder().
                    withCapabilities(capabilities).
                    build();
...

driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");
0
gyss

كيفية فتح علامة تبويب جديدة ، ولكن الأهم من ذلك ، كيف يمكنك فعل أشياء في علامة التبويب الجديدة هذه؟ لا يضيف Webdriver نافذة جديدة لكل علامة تبويب ، ويتحكم فقط في علامة التبويب الأولى. لذلك ، بعد تحديد علامة تبويب جديدة (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()
0
BClaydon

نظرًا لوجود خطأ في https://bugs.chromium.org/p/chromedriver/issues/detail؟id=1465 على الرغم من أن webdriver.switchTo يقوم بالفعل بتبديل علامات التبويب ، يبقى التركيز في علامة التبويب الأولى. يمكنك تأكيد هذا عن طريق القيام driver.get بعد التبديل ويندو ونرى أن علامة التبويب الثانية فعلا انتقل إلى عنوان URL الجديد وليس علامة التبويب الأصلية.

العمل حاليًا هو ما اقترحه @ yardening2. استخدم js لفتح تنبيه ثم استخدم webdriver لقبوله.

0
anilwanted