使用<ul>和<li>使用Selenium读取列表元素时出现问题

问题描述

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

   <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()的值始终为空,并且无法进行比较,我们可以帮我吗?

解决方法

我看到的是由于变量 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();
 }
}
,

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

    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

:(

,

请尝试输入代码:

 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();
     }
    }
,

要简单地单击具有NATURAL值的元素,请执行此操作。您可以将其放入数组并根据需要循环单击。

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

感谢您回答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}