簡體   English   中英

Java Selenium多表結構,遍歷所有

[英]Java Selenium multiple table structure, iterate through all

我有一個表,其中的行在另一個表的行內,該表的行很多(其他表的行)。

哇。 令人困惑。 讓我在你面前布置它!

.//*[@id='chatComponent']/div/swx-navigation
/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]

firstTable和行從此處開始:

 firstTable = /div/div/div/div[2]/div[1]/div/ul/li[*]

secondTable和行從此處開始:

 secondTable = firstTable/div/ul/li[*]

這是我的代碼,我在這里嘗試如何System.out.print表中的所有項目(位於第一個表中)

    List<WebElement> liElements = driver.findElements(By
            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]"));
    List<WebElement> liElements2 = driver.findElements(By
            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]"));

    System.out.println(liElements.size());
    System.out.println(liElements2.size());

    for (int i = 1; i < liElements.size()+1; i++) {
    if (i < liElements.size() ){
        WebElement linkElement = driver
                .findElement(By
                        .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[1]/div/ul/li[" + i + "]"));
        System.out.println(linkElement.getText());
    } else if (i == liElements.size()){
         WebElement linkElement2 = driver
                    .findElement(By
                            .xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[" + i + "]"));
        System.out.println(linkElement2.getText());
        }
    }

現在的問題是,它將遍歷表的第一個表,直到找不到更多對象,然后引發錯誤,但是它不會移動到下一個表以在該表中打印對象。 只是說好,打印了該表中的所有元素,但是繼續在該表中查找其他不存在的元素而失敗。

我在問,我怎么能做到這一點?

非常感謝您的協助。

您應該遵循以下算法:

  1. 在外部(第一個)表中查找所有行,並對其進行迭代。
  2. 從外部表中的每一行中,找到每個內部表中的行,然后遍歷內部表中的行。

     // find all the rows in the outer table List<WebElement> outerLIElementList = driver.findElements( By.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li")); System.out.println(outerLIElementList.size()); // iterate through the rows in the outer element for (WebElement outerLIElement : outerLIElementList) { // find the inner table rows using the outer table row List<WebElement> innerLIElementList = outerLIElement.findElements(By.xpath("//div/ul/li[*]")); // iterate through the inner table rows and sysout for (WebElement innerLIElement : innerLIElementList) { System.out.println(innerLIElement.getText()); } } 

暫無
暫無

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

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