如何用Selenium从网页表格获取Label文本?新手求助排查问题
嘿,作为Selenium新手碰到这种情况太正常了,我来帮你捋清楚问题出在哪以及怎么解决~
首先看你的代码和对应的HTML结构:
你用WebElement services = driver.findElement(By.xpath("//tr[@id='mr_2']/label"));定位元素,然后调用getText()获取文本,但这里的label标签有个关键属性:style="display: none"——也就是说这个元素是隐藏状态的。
Selenium的getText()方法默认只会返回可见元素的文本内容,对于隐藏元素,它会返回空字符串,这就是你拿不到文本的原因。
给你两个可行的解决方案:
方案一:用JavaScript获取隐藏元素的文本
因为JavaScript可以直接访问DOM元素的内容,不受元素是否可见的限制,代码可以改成这样:WebElement services = driver.findElement(By.xpath("//tr[@id='mr_2']/label")); JavascriptExecutor js = (JavascriptExecutor) driver; String strServices = (String) js.executeScript("return arguments[0].textContent;", services); System.out.println(strServices);这里通过
JavascriptExecutor执行脚本,获取元素的textContent属性,就能拿到隐藏label里的"Poor"文本了。方案二:间接关联获取(可选)
这个label是和id为element_2_1的单选按钮绑定的(for="element_2_1"),如果你只是需要对应的值,也可以通过定位单选按钮,再结合业务逻辑关联获取,但如果必须拿到label的文本,方案一最直接。
最后给你个小提醒:以后碰到获取文本为空或者元素定位后内容不符合预期的情况,先检查元素的可见性(比如看HTML里的display、visibility属性),Selenium对可见元素和隐藏元素的处理逻辑是不一样的哦~
内容的提问来源于stack exchange,提问作者Snowwhite

