场景:存在一个包含10个Web链接列表的网页。单击每个Web链接,然后使用Selenium Java在新窗口或选项卡中打开

时间:2018-07-19 17:26:58

标签: java selenium

我把这个作为面试问题。 需要帮助解决这个问题 场景:存在一个包含10个Web链接列表的网页。单击每个Web链接,然后使用selenium Java在新窗口或选项卡中打开。 示例here

点击 WebDriver 教程中的所有教程。应该在新标签页中打开

2 个答案:

答案 0 :(得分:0)

您可以使用JavascriptExecutor

  1. 首先,捕获列表中所有必需的链接元素
  2. 迭代所有list元素并从定位标记中获取href值
  3. 通过传递上述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
    }
}

注意:在这里,我只打开了不同标签中的前10个链接。如果您想在新标签页中打开所有链接,那么我建议使用如下所示的foreach循环

    for(WebElement tutoialLink : tutorialLinkList){

        String url=tutoialLink.getAttribute("href");
        js.executeScript("window.open(arguments[0])",url); //New Tab will be opened
    }

编辑: 带有操作类的代码

在该URL中右键单击不起作用,因此,您可以通过执行以下Ctr + click操作来打开链接为新标签

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

答案 1 :(得分:0)

根据您在评论部分的回复,您可以通过中提供的 Actions类实现相同的行为。

您可以尝试以下代码

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

    }
}