Selenium定位Nick Name标签祖先div获取文本报错排查
Selenium 地址簿自动化练习代码修正方案
现有代码错误点
setupDriver()方法逻辑顺序错误:return语句写在导航操作之前,后续页面跳转代码永远不会执行;获取到的驱动实例没有赋值给静态driver变量,后续调用元素定位方法时会直接抛出空指针异常。- 额外声明了原始模板不存在的
static String baseUrl变量,不符合平台代码结构校验规则。 - XPath 存在三处错误:
- 匹配的文本值错误:页面标签实际文本为
Nick Name(中间带空格),代码中写为NickName无法匹配到目标元素 - 谓词语法错误:
.//[text()='NickName']多写了一层无效方括号,不符合XPath语法规范 - 祖先定位逻辑错误:
/ancestor::div会匹配所有层级的上级div元素,无法精准定位到表单所属的目标div,导致获取的文本不符合预期
- 匹配的文本值错误:页面标签实际文本为
main方法为空,没有编写驱动初始化、页面跳转、元素定位的调用逻辑,代码无法走通完整执行流程。
可通过评测的完整实现代码
import org.openqa.selenium.WebDriver; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import java.util.concurrent.TimeUnit; public class NameLocator //DO NOT Change the class name { //Use the declared variables for stroing required values static String fName; static WebDriver driver; public WebDriver setupDriver() //DO NOT Change the method Signature { DriverSetup ds = new DriverSetup(); // 初始化驱动并赋值给静态变量 driver = ds.getWebDriver(); // 导航到目标地址簿页面 driver.get("http://webapps.tekstac.com/AddressBook/"); // 添加隐式等待保障元素加载,避免偶发定位失败 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); return driver; } public String getNameLocator() //DO NOT Change the method Signature { // 修正XPath:精准匹配Nick Name标签,向上查找包含表单的最近一级祖先div WebElement element = driver.findElement(By.xpath("//*[normalize-space(text())='Nick Name']/ancestor::div[.//form][1]")); fName = element.getText(); driver.close(); return fName; } public static void main(String[] args) { NameLocator namLocator=new NameLocator(); // 按流程调用方法:先初始化驱动跳转页面,再执行元素定位 namLocator.setupDriver(); namLocator.getNameLocator(); } }
代码说明
- 严格遵循平台类名、方法签名的要求,未修改预置的结构标识
- XPath中使用
normalize-space()处理文本前后可能存在的空格,提升定位稳定性;限定祖先div必须包含form表单,且取最近一级匹配结果,避免拿到上层无关div的文本 - 补全了完整执行链路,驱动初始化、页面跳转、元素取值、资源关闭的流程完全符合题目要求
内容的提问来源于stack exchange,提问作者Sherin
相关产品推荐
相关产品推荐

