【问题标题】:Problems using <ul> and <li> to read the elements of a list with Selenium使用 <ul> 和 <li> 使用 Selenium 读取列表元素的问题
【发布时间】:2020-10-11 03:59:41
【问题描述】:

我是 Selenium 的新手,在访问要显示列表的列表时遇到问题,您必须单击该列表,然后选择一个特定选项,我的选项是“自然”,我的页面有下一个代码:

   <div id="tipoIdentificacion_panel" class="ui-selectonemenu-panel ui-widget-content ui- 
    corner-all ui-helper-hidden ui-shadow" style="">
   <div class="ui-selectonemenu-items-wrapper" style="height:auto">
   
   <ul class="ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget 
   ui-corner-all ui-helper-reset">
   <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all ui-state- 
    highlight" data-label="Seleccione...">Seleccione...</li>
   <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data- 
    label="NATURAL">NATURAL</li>
   <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data- 
    label="JURIDICA EXTRANJERA">JURIDICA EXTRANJERA</li>
   </ul>
   </div>
   </div>

在 Java 中,我有下一个用于识别列表元素的代码

    WebDriverWait wait = new WebDriverWait(driver, 50);             
                    
    WebElement TipoPersonas= 
    driver.findElement(By.xpath("//*@id="tipoPersona_panel"]/div/ul"));
    List<WebElement> TipoPersona=TipoPersonas.findElements(By.tagName("li"));       
        
    for (WebElement lis : TipoPersona) {
     if (lis.getText().equals("NATURAL")) {
         lis.click();
       }

问题是永远找不到值“NATURAL”,因为lis.getText() 的值始终为空,并且无法进行比较,我们能帮帮我吗?

【问题讨论】:

  • 是什么网站?

标签: java selenium html-lists gettext


【解决方案1】:

我可以看到,由于变量 TipoPersonas 的 xpath 语法错误,您得到空指针异常,您在 //* 之后缺少方括号。而且我没有看到任何 id 为 tipoPersona_panel 的标签。

所以更改后的 xpath 将是://div[@id = 'tipoIdentificacion_panel']//div//ul

修改后的代码如下:

WebDriverWait wait = new WebDriverWait(driver, 50);             
                
WebElement TipoPersonas= 
driver.findElement(By.xpath("//div[@id='tipoIdentificacion_panel']//div//ul"));
List<WebElement> TipoPersona=TipoPersonas.findElements(By.tagName("li"));       
    
for (WebElement lis : TipoPersona) {
 if (lis.getText().equals("NATURAL")) {
     lis.click();
 }
}

【讨论】:

    【解决方案2】:

    感谢您回答我的问题,但我实现了代码并且我的问题仍然存在。我做到了:

        WebDriverWait wait = new WebDriverWait(driver, 50);             
        
        WebElement TipoPersonas= 
        driver.findElement(By.xpath("//div[@id='tipoIdentificacion_panel']//div//ul"));
        List<WebElement> TipoPersona=TipoPersonas.findElements(By.tagName("li"));  
        System.out.println("Size Tipopersona" + TipoPersona.size());
            
        for (WebElement lis : TipoPersona) {
            
         System.out.println("Value is" + lis.getText());    
         if (lis.getText().equals("NATURAL")) {
             lis.click();
         }
        }
    

    如果你在读的记录数是有效的5个选项,放个消息,但是GetText(),仍然没有为任何一个选项带来数据值。

    我认为这可能是因为我需要更新 ChromeDriver 并且我做到了,但它也没有工作。

    当我编译时它显示了这个结果:

        Size Tipopersona 5
    
        Value is
        Value is
        Value is
        Value is
        Value is
    

    :(

    【讨论】:

      【解决方案3】:

      请试一下代码:

       List<WebElement> TipoPersonas= 
          driver.findElements(By.xpath("//div[@class='ui-selectonemenu-items-wrapper']/ul/li"));  
          System.out.println("Size Tipopersona: " + TipoPersonas.size());   
          for (WebElement lis : TipoPersonas) {
                System.out.println("Value is" + lis.getText());    
                if(lis.getText().equalsIgnoreCase("NATURAL")) {
                lis.click();
           }
          }
      

      【讨论】:

      • 感谢您的帮助,但我的问题仍然存在,因为它没有带给我或比较值。
      【解决方案4】:

      要简单地单击具有 NATURAL 值的元素,我们这样做。你可以把它做成一个数组,如果你愿意,可以循环点击。

      WebElement TipoPersonas=driver.findElement(By.cssSelector("div.ui-selectonemenu-items-wrapper>ul>li[data-label='NATURAL']"));
      TipoPersonas.click();
      

      【讨论】:

        【解决方案5】:

        感谢您回答 Arundeep。实施您的解决方案时

           WebElement
           TipoPersonas=driver.findElement(By.cssSelector("div.ui-selectonemenu-items- 
           wrapper>ul>li[data-label='NATURAL']"));
           TipoPersonas.click();
        

        我收到以下错误:

           org.openqa.selenium.ElementNotInteractableException: element not interactable
          (Session info: chrome=86.0.4240.75)
          Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
          System info: host: 'O05P-CND23615X7', ip: '172.31.240.3', os.name: 'Windows 10', 
          os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_251'
          Driver info: org.openqa.selenium.chrome.ChromeDriver
         Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 
         86.0.4240.75, chrome: {chromedriverVersion: 86.0.4240.22 (398b0743353ff..., 
         userDataDir: C:\Users\ADMINI~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: 
         localhost:50931}, javascriptEnabled: true, networkConnectionEnabled: false, 
         pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), 
         setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, 
         pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, 
         webauthn:virtualAuthenticators: true}
        

        【讨论】:

          猜你喜欢
          • 2015-04-09
          • 2016-01-05
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-03
          • 1970-01-01
          • 2022-12-05
          相关资源
          最近更新 更多