当前位置: 首页 > 知识库问答 >
问题:

Selenium Java需要从第三个html子元素获取innertext值

马权
2023-03-14

下面是html代码

<h2 id="xyz" class="test">
  <button class="restore 1" value="test2" title="hello"> Line1 </button>
  <button class="restore 2" value="test3" title="click"> Line2 </button>
  I need this text
</h2>

我需要从上面的代码中提取文本“我需要这个文本”。

我尝试了以下方法,但无法得到唯一一行“我需要此文本:

1.)by.xpath("//h2[@id='xyz']"). gettext();获取错误说InvalidSseltorError:的xpath表达式的结果"//h2[@id='xyz']/继-兄弟::文本()"是:[对象文本].它应该是一个元素。

2)通过。//xyz[“”@xpath']。getattribute(innerText);通过这个选择器,我得到的输出是第1行,第2行

我的预期输出应仅为“我需要此文本”

共有2个答案

段劲
2023-03-14

您正在运行By上的getText()方法。您需要在WebElement上运行它:

WebElement h2 = driver.findElement(By.xpath("//h2[@id='xyz']"));
String wantedText = h2.getText();

最好是直接使用ID:

WebElement h2 = driver.findElement(By.id("xyz"));

编辑:返回孔文字的第二个选项,例如Line1、line2等。。。作品html写错了,因为它在h2标记下有按钮。。。因此,更好的选择是删除按钮中的文本。

赫连明诚
2023-03-14

Selenium API不支持文本节点。如果您只希望从节点获取文本,请使用带有一些JavaScript的帮助函数:

WebElement element = driver.findElement(By.cssSelector("#xyz"));
String text = getNodesText(element);
public static String getNodesText(WebElement element) {
    String SCRIPT = 
     "for(var arr = [], e = arguments[0].firstChild; e; e = e.nextSibling) " +
     "  if(e.nodeType === 3) arr.push(e.nodeValue);                        " +
     "return arr.join('').replace(/ +/g, ' ').trim();                     " ;

    WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();
    return  (String)((JavascriptExecutor)driver).executeScript(SCRIPT, element);
}
 类似资料:
  • 问题内容: 如果我知道文本标签包含什么,如何在html页面中获取标签。例如: 问题答案: 您将不得不手动遍历。

  • 问题内容: 有没有一种方法来获取LinearLayout的子元素?我的代码返回一个视图(linearlayout),但是我需要访问布局内部的特定元素。 有什么建议? (是的,我知道我可以使用findViewById,但是我正在用Java创建布局/子级-而不是XML。) 问题答案: 您可以随时执行以下操作:

  • 我正在使用JavaScript尝试从这个HTML中的span标记之间提取innertext“plain vanilla”。以及img标记之间的图像 javascript如下所示 但是,当我运行它时,我收到以下错误 customer.js:187未捕获的TypeError:无法读取HtmlButtonElement.AddToCartClicked(customer.js:187)上未定义的属性“i

  • 问题内容: 我希望获得选定元素的整个html,而不仅仅是它的内容。.html()根据文档使用javascripts innerHTML()方法。HTML: 使用将仅返回段落元素。我想获取整个元素的html,如下所示: 我不能使用.parent,因为这将返回两个子div的html。 问题答案: 您可以克隆它以获取全部内容,如下所示: 或使其成为一个插件,通常倾向于将其称为“ outerHTML”,如

  • 本文向大家介绍Elm从列表中获取第n个元素,包括了Elm从列表中获取第n个元素的使用技巧和注意事项,需要的朋友参考一下 示例 List不支持“随机访问”,这意味着要从列表中获取第五个元素要比第一个元素花费更多的工作,因此没有任何List.get nth list功能。必须从头开始(1 -> 2 -> 3 -> 4 -> 5)。 如果您需要随机访问,则使用随机访问数据结构(例如)可能会获得更好的结果

  • 本文向大家介绍JavaScript中获取HTML元素值的三种方法,包括了JavaScript中获取HTML元素值的三种方法的使用技巧和注意事项,需要的朋友参考一下 JavaScript中取得元素的方法有三种:分别是: 1、getElementById() 方法:通过id取得HTML元素。 2、getElementsByName()方法:通过name取得元素,是一个数组。 3、getElements