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

为元素创建Selenium getText()方法?

郁和通
2023-03-14
public String getText(By locationOfText, boolean childText)
{
  By locator = null;
  if ( childText)
  {
    locator = ByChained( locationOfText, By.xpath(".//string()"));
  } else {
    locator = ByChained( locationOfText, By.xpath(".//text()"));
  }
  JavascriptExecutor jse = (JavascriptExecutor)driver;
  String elementText = jse.executeScript("document.evaluate(locator, document.body, null, 
     XPathResult.STRING_TYPE, null);");

  return elementText;
} 
<h5 class="class-name clearfix">Inner Text
   <a class="info-link class-description" href="#">i</a>
</h5>

问题是,当我使用Selenium执行如下所示的文本调用时,会得到文本Inner Texti:

driver.findElement(".//h5").getText();

我的期望是检索值内部文本。通过创建上面的方法,我希望这样调用它:

String text = elementHelper.getText(By.xpath(".//h5"),false);

共有1个答案

燕和裕
2023-03-14

string()是XPath 2.0结构,但大多数浏览器(如果不是全部)只支持XPath 1.0。此外,我并不喜欢匆忙地使用XPath查询DOM树。XPath评估有很大的性能开销。因此,我在这里修改我的答案,建议:

public String getText(By locationOfText, boolean childText)
{
  WebElement el = driver.findElement(locationOfText);
  if (childText)
  {
    return el.getText();
  }

  JavascriptExecutor jse = (JavascriptExecutor) driver;
  return jse.executeScript(
    "var parent = arguments[0]; "+
    "var child = parent.firstChild; "+
    "var ret = ""; "+
    "while(child) { "+
    "    if (child.nodeType === Node.TEXT_NODE) "+
    "        ret += child.textContent; "+
    "    child = child.nextSibling; "+
    "} "+
    "return ret;", el);
}

locationoftext参数可以是Selenium支持的任何by方法。

在代码中,您将bychained用于location,您可能希望将其传递给executescript但忘记了执行。即使您将location添加到executescript调用中(并修复脚本以获取参数[0]),我也看不出这将如何工作。bychained支持将CSS选择器与XPath混合使用等。Selenium可以通过执行多个搜索来解决这种组合,但浏览器的XPath引擎不可能接受CSS和XPath的某种组合。

 类似资料:
  • 问题内容: 我想使用By.id或By.cssSelector来getText()。 我通过执行getAttribute(“ value”)设法解决了我的问题,但是我不明白为什么getText()不能像我期望的那样工作,我可能需要它,因此感谢所有帮助。 这是java: 和html: 问题答案: http://selenium.googlecode.com/svn/trunk/docs/api/jav

  • 根据一个字符串创建一个元素(不附加到 document )。 如果给定的字符串包含多个元素,则只返回第一个元素。 使用 document.createElement() 来创建一个新的元素。 将它的 innerHTML 设置为作为参数提供的字符串。 使用 ParentNode.firstElementChild 来返回字符串的元素版本。 const createElement = str => {

  • 本文向大家介绍JS动态创建DOM元素的方法,包括了JS动态创建DOM元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS动态创建DOM元素的方法。分享给大家供大家参考。具体如下: 近日,因工作需要,需要通过点击某个元素后, 动态创建一个DOM元素并显示,因此写了一些相关的JS函数,在此记录,以作备忘: 使用示例: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍javascript元素动态创建实现方法,包括了javascript元素动态创建实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript元素动态创建实现方法。分享给大家供大家参考。具体分析如下: document.write只能在页面加载过程中才能动态创建 可以调用document的createElement方法来创建具有指定标签的DOM对象,然后通过调用

  • 我正在制作一个React应用程序,允许你制作一个列表并保存它,但React一直在警告我,我的元素没有唯一的关键道具(元素列表/列表表单)。如何为用户创建的元素创建唯一的关键道具?下面是我的代码 我的超文本标记语言:

  • 问题内容: 我正在制作一个React应用程序,该应用程序允许您创建列表并保存它,但是React一直警告我我的元素没有唯一的键道具(元素List / ListForm)。如何为用户创建的元素创建唯一的键道具?下面是我的React代码 我的HTML: 问题答案: 您可以通过多种方式创建,最简单的方法是在迭代数组时使用索引。 例 无论您将数据放在何处,都可以在此处将第二个参数传递 给回调,这将是它的值,