如何通过标签检查元素是否存在?Selenium定位特定a标签失败求助
解决元素存在性检查的问题
你原来的方法无效是因为用错了定位方式哦!By.tagName()是用来匹配HTML标签的名称(比如<a>的标签名就是a),而你写的data-cke-saved-name name是元素的属性,自然找不到目标元素啦。
下面给你两种正确的定位思路,以及对应的元素存在性检查方法:
一、先修正元素定位器
你的目标元素是<a data-cke-saved-name name></a>,可以通过以下两种方式定位:
1. CSS选择器定位
- 如果你只需要匹配带有
data-cke-saved-name属性的<a>标签:By.cssSelector("a[data-cke-saved-name]") - 如果需要同时匹配
name属性(哪怕它的值为空):By.cssSelector("a[data-cke-saved-name][name]")
2. XPath定位
- 对应只匹配
data-cke-saved-name属性的写法:By.xpath("//a[@data-cke-saved-name]") - 同时匹配
name属性的写法:By.xpath("//a[@data-cke-saved-name and @name]")
二、检查元素存在的两种常用方法
方法1:基于try-catch捕获异常(修正定位器即可复用你的原有逻辑)
把定位器换成上面的正确写法,代码就能正常工作了:
WebElement link = null; try { link = Main.s_driver.findElement(By.cssSelector("a[data-cke-saved-name]")); System.out.println("OK"); } catch (NoSuchElementException e) { System.out.println("Something went wrong"); }
方法2:使用findElements()判断列表是否为空
这种方式不需要捕获异常,更适合单纯判断元素是否存在的场景,代码更简洁:
import java.util.List; import org.openqa.selenium.WebElement; // ... List<WebElement> links = Main.s_driver.findElements(By.cssSelector("a[data-cke-saved-name]")); if (!links.isEmpty()) { System.out.println("OK"); } else { System.out.println("Something went wrong"); }
内容的提问来源于stack exchange,提问作者Irina
相关产品推荐
相关产品推荐

