簡體   English   中英

如何在Java中使用Selenium在菜單中的新選項卡中打開一個鏈接

[英]How to open one by one link in new Tab from Menu using Selenium in Java

我試圖在Selenium Java中的新Tab中打開一個鏈接,但是第一次只有一個鏈接打開,但是當打開第二個鏈接時For Loop出錯了,誰能幫我解決這個問題。

這是我的代碼。

public class Link_Open_In_New_Tab {

    public WebDriver driver;

    @BeforeTest
    public void OpenBrowser() {

        System.setProperty("webdriver.chrome.driver", "./driver/chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.nopcommerce.com/");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void OpenLink() throws InterruptedException {

        List<WebElement> ProMenu;
        WebElement SubLinks;
        driver.findElement(By.xpath("//ul[@class='top-menu']/li[1]/a")).click();
        ProMenu = driver.findElements(By.xpath("//ul[@class='top-menu']/li[1]/ul[@class='sublist']/li/a"));

        for (int i = 0; i < ProMenu.size(); i++) {

            SubLinks = driver
                    .findElement(By.xpath("//ul[@class='top-menu']/li[" + (i + 1) + "]/ul[@class='sublist']/li/a"));
            Actions act = new Actions(driver);
            act.keyDown(Keys.CONTROL).click(SubLinks).keyUp(Keys.CONTROL).build().perform();
            Thread.sleep(2000);

            String winHandleBefore = driver.getWindowHandle();

            for (String winHandle : driver.getWindowHandles()) {
                driver.switchTo().window(winHandle);
            }

            Thread.sleep(2000);

            driver.close();
            Thread.sleep(2000);

            driver.switchTo().window(winHandleBefore);
            Thread.sleep(2000);

            //driver.findElement(By.xpath("//ul[@class='top-menu']/li[1]/a")).click();
            //Thread.sleep(2000);
        }
    }

}

您必須將鼠標懸停Product上 ,才能獲得所有sub menus items 之后,您可以使用SeleniumJAVA中提供的Actions類來模擬鍵盤筆觸。

您可以嘗試以下代碼

public class Ashish  {

    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.nopcommerce.com/");
        Actions action = new Actions(driver);
        action.moveToElement(driver.findElement(By.xpath("//ul[@class='top-menu']/li[1]/a"))).build().perform();  
        List<WebElement> element = driver.findElements(By.xpath("//ul[@class='top-menu']/li[1]/ul[@class='sublist']/li/a"));
        for(WebElement ele:element) {
            action.keyDown(Keys.LEFT_CONTROL).moveToElement(ele).click().keyUp(Keys.LEFT_CONTROL).build().perform();
        }


        }
}  

更新1

public class Ashish  {

    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.nopcommerce.com/");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        Actions action = new Actions(driver);
        action.moveToElement(driver.findElement(By.xpath("//ul[@class='top-menu']/li[1]/a"))).build().perform();  
        List<WebElement> element = driver.findElements(By.xpath("//ul[@class='top-menu']/li[1]/ul[@class='sublist']/li/a"));
        System.out.println(element.size());
        for(int i = 0 ; i<element.size() ; i++) {
            action.keyDown(Keys.LEFT_CONTROL).moveToElement(wait.until(ExpectedConditions.elementToBeClickable(element.get(i)))).click().keyUp(Keys.LEFT_CONTROL).build().perform();
            ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
            driver.switchTo().window(tabs.get(1));
            System.out.println(driver.getTitle());
            driver.close();
            driver.switchTo().window(tabs.get(0));
        }


        }
}

控制台輸出:

9
nopCommerce - ASP.NET free shopping cart solution. What is nopCommerce?
nopCommerce - ASP.NET Open-source Ecommerce Shopping Cart Solution
nopCommerce - ASP.NET open source eCommerce solution. Feature list.
nopCommerce - Shopping Cart Demo & Shopping Cart Solution
nopCommerce - open source shopping cart. Showcase. Live Shops.
nopCommerce - open source shopping cart. Case Studies and Success Stories.
nopCommerce - ASP.NET open source shopping cart. Roadmap.
nopCommerce copyright removal key - nopCommerce
The nopCommerce Public License Version 3.0 ("NPL") - nopCommerce

您試圖打開產品菜單中的所有子鏈接。 但是您的子鏈接xpath指向所有菜單的第一個子鏈接( li[" + (i + 1) + "]/ul[@class='sublist']/li/a )。 因此,您需要按如下所示修改子鏈接xpath,然后嘗試

SubLinks = driver.findElement(By.xpath("//ul[@class='top-menu']/li[1]/ul[@class='sublist']/li[" + (i + 1) + "]/a"));

如果您打算測試鏈接標題是否按預期工作,那么為什么需要Crtl + click。

根據開發情況,此處的鏈接是單擊而不是ctrl + click,就我個人而言,我不願意執行此操作。

創建變量say int i = 1;

像使用的那樣循環播放,請正常單擊並驗證標題。 然后增加i並返回瀏覽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM