场景:有一个包含10个web链接的网页。单击每个web链接并使用selenium Java在新窗口或选项卡中打开

场景:有一个包含10个web链接的网页。单击每个web链接并使用selenium Java在新窗口或选项卡中打开,java,selenium,Java,Selenium,这是我面试时问的问题。 需要帮助来解决这个问题吗 场景:有一个包含10个web链接的网页。单击每个web链接并使用selenium Java在新窗口或选项卡中打开。 例如 单击WebDriver教程中的所有教程。它应该在新选项卡中打开您可以使用JavascriptExecutor 首先,捕获列表中所有必需的链接元素 迭代所有列表元素并从锚标记获取href值 通过传递上述href值,使用JavaScript执行器打开窗口 代码: public static void main(String

这是我面试时问的问题。 需要帮助来解决这个问题吗 场景:有一个包含10个web链接的网页。单击每个web链接并使用selenium Java在新窗口或选项卡中打开。 例如


单击WebDriver教程中的所有教程。它应该在新选项卡中打开

您可以使用
JavascriptExecutor

  • 首先,捕获列表中所有必需的链接元素
  • 迭代所有列表元素并从锚标记获取href值
  • 通过传递上述href值,使用JavaScript执行器打开窗口
  • 代码:

        public static void main(String args[]) {
    
        System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.guru99.com/selenium-tutorial.html");
        driver.manage().window().maximize();
    
        WebDriverWait wait=new WebDriverWait(driver,20);
        wait.until(ExpectedConditions.titleContains("Selenium Tutorial"));
    
        List<WebElement> tutorialLinkList=driver.findElements(By.xpath("//strong[contains(text(),'Tutorial')]/ancestor::a"));
    
        JavascriptExecutor js=(JavascriptExecutor)driver;
    
        //I have just clicked only 10 link. If you want to iterate all the available links, then use foreach loop
        for(int i=0;i<10;i++){
            String url=tutorialLinkList.get(i).getAttribute("href");
            js.executeScript("window.open(arguments[0])",url); //New Tab will be opened
        }
    }
    
    编辑:使用操作类编写代码

    看起来右键单击在该URL中不起作用,因此,您可以通过执行以下
    Ctr+单击操作打开“链接是新的”选项卡

    public static void main(String args[]) {
    
        System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.get("https://www.guru99.com/selenium-tutorial.html");
        driver.manage().window().maximize();
    
        WebDriverWait wait=new WebDriverWait(driver,20);
        wait.until(ExpectedConditions.titleContains("Selenium Tutorial"));
    
        List<WebElement> tutorialLinkList=driver.findElements(By.xpath("//strong[contains(text(),'Tutorial')]/ancestor::a"));
    
        Actions action = new Actions(driver);
    
        //I have just clicked only 10 link. If you want to iterate all the available links, then use foreach loop
        for(int i=0;i<10;i++){
    
            action.keyDown(Keys.CONTROL).click(tutorialLinkList.get(i)).keyUp(Keys.CONTROL).build().perform();
        }
    }
    
    publicstaticvoidmain(字符串参数[]){
    System.setProperty(“webdriver.chrome.driver”、“drivers/chromedriver.exe”);
    WebDriver驱动程序=新的ChromeDriver();
    驱动程序。获取(“https://www.guru99.com/selenium-tutorial.html");
    driver.manage().window().maximize();
    WebDriverWait wait=新的WebDriverWait(驱动程序,20);
    等到(预期条件.标题含量(“硒教程”);
    List tutorialLinkList=driver.findelelements(By.xpath(“//strong[contains(text(),'Tutorial')]/concenter::a”);
    动作动作=新动作(驱动);
    //我只点击了10个链接。如果你想迭代所有可用的链接,那么使用foreach循环
    
    对于(int i=0;i,根据您在评论部分的回答,您可以通过操作类实现相同的行为,该类可在selenium中获得

    您可以尝试以下代码:

    public class Amisha  {
    
        static WebDriver driver ; 
    
        public static void main(String[] args) throws InterruptedException {
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\user***\\Downloads\\chromedriver_win32\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("https://www.guru99.com/selenium-tutorial.html");
            JavascriptExecutor jse = (JavascriptExecutor)driver;
            jse.executeScript("window.scrollBy(0,650)", "");
            List<WebElement> element = driver.findElements(By.xpath("//strong[text()='WebDriver Tutorial']/following-sibling::table[1]/descendant::a"));
            Actions action = new Actions(driver);
            for(WebElement ele:element) {
                action.keyDown(Keys.LEFT_CONTROL).moveToElement(ele).click().keyUp(Keys.LEFT_CONTROL).build().perform();
            }
    
        }
    }
    
    公共类Amisha{
    静态网络驱动程序;
    公共静态void main(字符串[]args)引发InterruptedException{
    System.setProperty(“webdriver.chrome.driver”,“C:\\Users\\user***\\Downloads\\chromedriver\u win32\\chromedriver.exe”);
    驱动程序=新的ChromeDriver();
    driver.manage().window().maximize();
    驱动程序。获取(“https://www.guru99.com/selenium-tutorial.html");
    JavascriptExecutor jse=(JavascriptExecutor)驱动程序;
    jse.executeScript(“window.scrollBy(0650)”,“”);
    List元素=driver.findElements(By.xpath(//strong[text()='WebDriver Tutorial']/以下同级::表[1]/后代::a”);
    动作动作=新动作(驱动);
    for(WebElement ele:element){
    action.keyDown(Keys.LEFT_控件)。moveToElement(ele)。click().keydup(Keys.LEFT_控件)。build().perform();
    }
    }
    }
    
    @cruisepandey:不。tutoriallinglist将保存所有必需的链接元素。因此,我们可以迭代所有列表并提取href值。我已经用上述代码进行了测试,所有链接都将以新的格式打开tab@cruisepandey谢谢你的帮助,但是我可以不用js.executeScript吗。@阿米沙达马尼:是的,我们可以使用actions cl来实现请检查更新的答案
    public class Amisha  {
    
        static WebDriver driver ; 
    
        public static void main(String[] args) throws InterruptedException {
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\user***\\Downloads\\chromedriver_win32\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("https://www.guru99.com/selenium-tutorial.html");
            JavascriptExecutor jse = (JavascriptExecutor)driver;
            jse.executeScript("window.scrollBy(0,650)", "");
            List<WebElement> element = driver.findElements(By.xpath("//strong[text()='WebDriver Tutorial']/following-sibling::table[1]/descendant::a"));
            Actions action = new Actions(driver);
            for(WebElement ele:element) {
                action.keyDown(Keys.LEFT_CONTROL).moveToElement(ele).click().keyUp(Keys.LEFT_CONTROL).build().perform();
            }
    
        }
    }