簡體   English   中英

在Selenium + Java中大量鏈接列表中導航

[英]Navigation through link list massive in Selenium + Java

我需要一個可以瀏覽在線個人資料並返回的腳本。 我有一些代碼可以顯示頁面上有多少在線個人資料鏈接:

driver.get("http://mygirlfund.com");
driver.findElement(By.id("email")).sendKeys("somemail");
driver.findElement(By.id("password")).sendKeys("somepass");
driver.findElement(By.id("btn-submit")).submit();
driver.findElement(By.xpath(".//*[@id='btn-2i']/a")).click();
// log in
List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
// miracle, have found links of all online profiles
System.out.println(allLinks.size());
for (int i = 1; i < allLinks.size(); i++)
{
    for (WebElement link : allLinks)
    {
        link.click();
        driver.navigate().back();
        // here write a message
    }
    i++;
    // navigating through user profiles
}

因此,我需要單擊一個鏈接,然后返回到上一(主)頁面,但它僅導航至第一個鏈接並返回。

-loop的外部for是什么? 為什么用1(而不是0)初始化i 為什么你增加i兩次? 內部循環應足夠:

List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
for (WebElement link : allLinks) {
    link.click();
    driver.navigate().back();
}

或者,您可以像這樣在for循環中一個接一個地檢索Web元素(但是,如果鏈接少於25個,則會引發Exception):

        for (int i = 0; i < 25; i++) {
            String xpath = "//img[@alt='Online Now!']/../..//a[" + (i+1) + "]";
            WebElement link = driver.findElement(By.xpath(xpath));
            link.click();
            //....
        }

我發現,當我更新網頁時,配置文件鏈接的后果正在崩潰。 因此,決定在新窗口中打開配置文件鏈接。 做一些動作並關閉它。 正如上面的家伙所說,使用兩個循環是愚蠢的決定。 這段代碼非常適合我:

for(WebElement link : driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"))){             
            String originalWindow =driver.getWindowHandle();
            System.out.println("Original handle is: "+ originalWindow);
//open link in new window
            act.contextClick(link).perform();
            act.sendKeys("w").perform();

            Thread.sleep(4000);
            for (String newWindow : driver.getWindowHandles())
            {
            driver.switchTo().window(newWindow); 
            System.out.println("NOW THE CURRENT Handle is: "+ newWindow);
            }
            Thread.sleep(2000);
//here write a message              
            driver.close();
            driver.switchTo().window(originalWindow);
}

注意:當我在變量中存儲找到的鏈接並在循環中使用它時:

List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
//have found links of all online profiles
System.out.println(allLinks.size());
for (WebElement link : allLinks)
{
    String originalWindow =driver.getWindowHandle();
            System.out.println("Original handle is: "+ originalWindow);
//open link in new window
            act.contextClick(link).perform();
            act.sendKeys("w").perform();

            Thread.sleep(4000);
//continue handling new window

我的腳本會永久打開剛建立的第一個鏈接。 可能對某人有用。 謝謝大家!

暫無
暫無

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

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