【问题标题】:I want to extract all <li> element text that are under <ul>我想提取 <ul> 下的所有 <li> 元素文本
【发布时间】:2020-07-28 00:40:33
【问题描述】:

我需要点击所有元素 BASIC、TRACKS、... 我的想法是提取列表中的所有元素,然后使用列表计数和循环,我将单击每个元素。 即使添加了新元素,也需要检查每个元素是否正常工作我不想检查代码。

<div class="headerarea" style="" xpath="1">
                    <h2>
                        <span id="ctl00_ctl00_phDesktop_lblModuleTitle">Abstract Setup</span>
                    </h2>
                    
                            <ul>
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl01_btnModuleNavigation" class="headerarea_active" href="https://staging.m-anage.com/Modules/Abstract/Setup/basics.aspx">Basic</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl02_btnModuleNavigation" href="https://staging.m-anage.com/testselenium/en-US/Abstract/AbstractSetup/Tracks">Tracks</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl03_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/steps.aspx">WIZARD</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl04_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/keywords.aspx">KEYWORDS</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl05_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/categories.aspx">CATEGORIES</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl06_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/conditions.aspx">CONDITIONS</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl07_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/interests.aspx">Interests</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl08_btnModuleNavigation" href="https://staging.m-anage.com/Modules/Abstract/Setup/templates.aspx">Templates</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl09_btnModuleNavigation" href="https://staging.m-anage.com/testselenium/en-US/Abstract/AbstractSetup/Index">Submission fee</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl10_btnModuleNavigation" href="https://staging.m-anage.com/testselenium/en-US/Mail/MailServerSetup/Index?pModuleType=Abstract" style="">SMTP Setup</a></li>
                            
                        
                            <li>
                                <a id="ctl00_ctl00_phDesktop_rModuleNavigation_ctl11_btnModuleNavigation" href="https://staging.m-anage.com/testselenium/en-US/Abstract/AbstractSetup/Coauthor">Co-author</a></li>
                            
                        
                            </ul>
                        
                </div>

I tried travelling to child path but no success

这是我试过的java代码。

    List<WebElement> tags = 
          driver.findElements(By.xpath("//div[@class='headerarea']/ul/li")); 
    for(int i=0;i<tags.size();i++) { 
       while(???) { 
        
     //driver.findElement(By.xpath("//div[@class='headerarea']/ul/li")).click(); 
         }
    }

【问题讨论】:

  • 你的代码在哪里?
  • List tabs= driver.findElements(By.cssSelector("//div[@class='headerarea'].h2"));我不确定你在说什么代码。 @JaSON
  • 是的,你的 Java 代码。使用代码和错误跟踪更新您的问题
  • List tags = driver.findElements(By.xpath("//div[@class='headerarea']/ul/li")); for(int i=0;i

标签: java selenium xpath css-selectors


【解决方案1】:

试试下面的代码:

List<WebElement> links = driver.findElements(By.tagName("li"));
for (int i = 1; i < links.size(); i++)
{
    System.out.println(links.get(i).getText());
}

如果您遇到同步问题,也可以使用WebDriverWait

 WebDriverWait wait = new WebDriverWait(driver, 10);
 List<WebElement> links = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName(li)));
 for (int i = 1; i < links.size(); i++)
 {
  System.out.println(links.get(i).getText());
 }

【讨论】:

  • 我可以提取文本,但是当我尝试单击每个元素时,它会出错。 org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document (Session info: chrome=84.0.4147.89) 有关此错误的文档,请访问:seleniumhq.org/exceptions/stale_element_reference.html Build
  • 这意味着您的 DOM 引用不再有效。当您下次尝试对元素执行操作时,该元素不再附加到 DOM。尝试刷新您的参考,或者在现实世界中再次找到该元素
【解决方案2】:
List<WebElement> tags = driver.findElements(By.cssSelector(".headerarea ul>li")); 
for(WebElement e : tags) {
    e.click();
}

【讨论】:

  • 是的,我试过了,但出现错误,所以尝试使用计数。 org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document (Session info: chrome=84.0.4147.89) 有关此错误的文档,请访问:seleniumhq.org/exceptions/stale_element_reference.html Build info: version: '3.141. 59',修订:'e82be7d358',时间:'2018-11-14T08:17:03'
  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
猜你喜欢
  • 2019-10-18
  • 1970-01-01
  • 2022-12-05
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2018-12-20
  • 2021-09-01
相关资源
最近更新 更多