You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位Saucedemo页面登录凭据中的用户名元素(XPath/CSS)?

解决Saucedemo登录凭据区域用户名提取问题

问题原因

Selenium的findElement()方法仅能定位DOM中的元素节点,无法直接获取文本节点(你使用的//*[@id="login_credentials"]/text()[1]返回的是文本节点,并非元素),这是导致报错的核心原因。登录凭据区域的用户名是与<h4>元素同级的文本内容,需通过元素节点间接提取。

解决方案

方案一:提取父元素全部文本后过滤用户名

这种方式无需依赖DOM节点索引,兼容性更强:

public class pr1 
{   
  @Test
  public void Test1() throws InterruptedException
  {
      WebDriverManager.chromedriver().setup();
      WebDriver driver=new ChromeDriver();
      driver.get("https://www.saucedemo.com/");
      // 获取登录凭据区域的全部文本
      String allCredentialsText = driver.findElement(By.id("login_credentials")).getText();
      // 按换行分割文本,跳过第一行说明文字,提取第一个用户名
      String[] textLines = allCredentialsText.split("\\n");
      if (textLines.length > 1) {
          String targetUsername = textLines[1];
          System.out.println(targetUsername);
      }
      driver.quit();
   }    
}

方案二:通过JavaScript精准定位文本节点

若需要指定提取某一个文本节点,可通过JS操作DOM直接获取(注意:节点索引可能随页面结构变化失效):

public class pr1 
{   
  @Test
  public void Test1() throws InterruptedException
  {
      WebDriverManager.chromedriver().setup();
      WebDriver driver=new ChromeDriver();
      driver.get("https://www.saucedemo.com/");
      // 执行JS获取指定文本节点的内容
      String targetUsername = (String) ((JavascriptExecutor) driver).executeScript(
          "return document.getElementById('login_credentials').childNodes[2].textContent.trim();"
      );
      System.out.println(targetUsername);
      driver.quit();
   }    
}

内容的提问来源于stack exchange,提问作者Swanand Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:15:59