如何在Selenium中从无value属性的禁用div获取文本
解决从无value属性的隐藏div中获取文本的问题
我来帮你搞定这个问题!首先咱们先理清楚你遇到的核心问题:
为什么你之前的尝试没成功?
arguments[0].value:div元素本身就没有value属性,这个属性是input、select这类表单元素才有的,所以用这个方法肯定拿不到值,返回null是正常的。arguments[0].innerHTML:你提供的HTML代码里这个div是空的,但截图里显示有"20",要么是这个div的文本是纯文本(不是HTML内容),要么是你的定位可能有偏差,或者元素还没加载完成。
试试这些解决方案:
1. 使用textContent或innerText获取纯文本
div的文本内容通常存在textContent(获取所有文本,包括隐藏的)或innerText(仅获取可见文本)属性里,替换你的JS脚本试试:
// 用textContent获取所有文本 String theTextIWant = (String) ((JavascriptExecutor) driver).executeScript("return arguments[0].textContent;", driver.findElement(By.xpath("//div[@class='input-cell field-615']//following-sibling::div[@class='input-cell-accessType-disabled active']"))); System.out.println("textineed: " + theTextIWant); // 用innerText获取可见文本 String theTextIWant2 = (String) ((JavascriptExecutor) driver).executeScript("return arguments[0].innerText;", driver.findElement(By.xpath("//div[@class='input-cell field-615']//following-sibling::div[@class='input-cell-accessType-disabled active']"))); System.out.println("textineed2: " + theTextIWant2);
2. 直接用Selenium的原生方法
如果元素是隐藏的,Selenium的getText()可能拿不到,但可以试试getAttribute("textContent"):
WebElement targetElement = driver.findElement(By.xpath("//div[@class='input-cell field-615']//following-sibling::div[@class='input-cell-accessType-disabled active']")); // 尝试getText() String visibleText = targetElement.getText(); System.out.println("getText结果: " + visibleText); // 尝试获取textContent属性 String allText = targetElement.getAttribute("textContent"); System.out.println("textContent结果: " + allText);
3. 检查是否是CSS伪元素生成的文本
如果"20"是通过CSS的:before或:after伪元素渲染出来的(比如开发者工具里元素的伪元素里有content),那需要用getComputedStyle来获取:
String pseudoText = (String) ((JavascriptExecutor) driver).executeScript("return window.getComputedStyle(arguments[0], ':before').content;", driver.findElement(By.xpath("//div[@class='input-cell field-615']//following-sibling::div[@class='input-cell-accessType-disabled active']"))); // 注意伪元素的content可能带引号,需要去掉 pseudoText = pseudoText.replaceAll("['\"]", ""); System.out.println("伪元素文本: " + pseudoText);
4. 验证定位是否正确
最后别忘了确认你的XPath真的定位到了目标元素,可以打印元素的标签名或类名来验证:
WebElement targetElement = driver.findElement(By.xpath("//div[@class='input-cell field-615']//following-sibling::div[@class='input-cell-accessType-disabled active']")); System.out.println("定位到的元素标签: " + targetElement.getTagName()); System.out.println("定位到的元素类名: " + targetElement.getAttribute("class"));
内容的提问来源于stack exchange,提问作者Chaitanya Pujari
相关产品推荐
相关产品推荐

