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

Selenium:在没有输入标记的字段中输入文本-如何找到它是哪一个?

汝墨一
2023-03-14

我需要将文本输入到没有输入标记的表中的字段中。此XPath唯一地指出字段

//div[@id="contentBody"]//div[@row="0"]/div[contains(@class, "l4") and contains(@class, "r4")]

(可以在此XPath中添加一个尾随/div,这没有区别)

我可以使用该XPath读取该字段,但当我尝试在同一字段中插入一些文本时,我会得到一条错误消息:

InvalidElementStateException: Message: invalid element state: Element must be user-editable in order to clear it.
<div class="slick-cell l4 r4  alignRight uppercase highint editable-cell active selected" aria-describedby="inforDataGrid731693C5" tabindex="-1" role="gridcell">
    <div class="edit-cell">2,0</div></div>

共有3个答案

潘阳舒
2023-03-14
热门标签
闾丘正志
2023-03-14
相关问题
洪光霁
2023-03-14

您得到的结论是经过修正的--您不能将输入发送到

标记,这不是浏览器通常的工作方式(“Edit2”中给出了该规则的一个例外)。代码异常清楚地说明了它--“Element必须是用户可编辑的,以便清除它”。不管div有一个“edit-cell”的类值--这只是一个由开发人员选择的名称,用于示例性建议;这并不意味着div将能够接受输入。

应用程序使用的UI很可能使用此

来样式化地表示用户设置的值;有一个隐藏的 元素接受实际的键盘条目,javascript代码用它们更新

您必须找到输入标记,并将其作为更改的目标。

以下是如何找到输入标记--在浏览器中,(手工)将值设置为页面唯一的字符串--例如,“MyMegasSpecialString”。然后在控制台中运行以下js:

[...document.getElementsByTagName("input")].forEach(function(el){ if (el.value == "myMegaSpecialString"){console.log(el);} })

它将打印具有该“特殊”值的元素。

根据注释中的讨论,没有发现元素具有此值。正如@Andersson正确地纠正的那样,在特殊情况下,输入以外的其他元素可以接收,khm,input--它们应该具有contenteditable属性,并且它是从父元素继承的--例如,如果设置在标记上,则可以在页面中的任何元素上键入。

so-JavaScript的修改版本,用于定位“谁持有我们的值”;值得庆幸的是,getElementsByTagName()支持参数的通配符-这将匹配任何元素:

[...document.getElementsByTagName("*")].forEach(function(el){ if (el.value == "myMegaSpecialString"){console.log(el);} })

它可能会慢一点--但它必须打印value属性等于“MyMegasSpecialString”的元素。

任务继续-您输入的文本不会出现在任何元素的value属性中?没问题,让我们在元素文本内容中查找它。
当您实际编辑

或类似标记的内容(手指交叉...:)时,可能会出现这种情况。

这是前一个版本的变体-手动将文本设置为在整个页面中唯一的值(以限制输出),并在控制台中运行该值:

[...document.getElementsByTagName("*")].forEach(function(el){ if (el.textContent.indexOf("myMegaSpecialString") !== -1){console.log(el);} })

,这将(应该?可能?我现在还不确定:d)在控制台中打印所有将该字符串作为其文本一部分的DOM元素。

分解javascript中的内容,以备将来的更改:

  • Document.GetElementsByTagName(“*”)]返回具有该标记名的所有元素作为数组;参数星号(*)-任何标记名。
  • foreach-集合元素上的循环,将每个元素传递给其中的匿名函数。
  • el.textContent-返回节点(及其子节点)的文本内容。
  • indexof()-返回参数在字符串中的位置,如果不存在-1(为了兼容性,indexof()contains()使用,后者在ES6中使用)。
  • 如果条件返回true,则console.log(el)将在控制台中打印该条件。

相关问题


  • 我在Android中创建App Bundle时出错:使用保留文件或目录名称“res”
  • 在 FXML 文件中设置自定义控件的按钮“onAction”方法?
  • 不同包中的FXML和控制器-Button onAction问题
  • Java proguard 保留具有 FXML 注释的字段和方法的名称
  • Android版本APK崩溃,java.lang.AssertionError:java.lang.Enum中不可能
  • 测试中的NullPointerExeption
  • apache POI中单元的直接寻址
  • 使用Apache POI删除Excel文件中的多行
  • 如何使用Apache POI从excel表中检索日期
  • 如何避免使用`$parent?$parent。嵌套范围中的$ parent′
  • 在angularjs中添加新输入
  • 如何在angular js中的其他地方点击时隐藏输入字段
  • $scope变量未在视图中更新
  • 单选按钮未选中时的角度问题
  • 如何在 AngularJS 中追踪$watch模型更新的来源?
  • Angular 2-如何使用ngIF获取输入的有效状态
  • 更新AngularJS中的父范围变量
  • '的ng-model(带有指令DEMO)" target="_blank">'<输入类型="文件"/>'的ng-model(带有指令DEMO)
  • 在嵌套的ng-repeat中传递2 $index值
  • ng-重复:单字段过滤

热门标签

Java JavaScript Python PHP C# Android Html jQuery C++ Css IOS MySQL NodeJS
 类似资料:
  • 我在selenium查找输入文本字段时遇到了问题--'billing-address__line-1我使用的代码是- 错误信息 线程“main”org.openqa.selenium.nosuchelementException:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“.//fieldset[.//input[@id='billing-addres

  • 问题内容: 当我在文本字段中输入文本时,它将被删除。 这是代码: 问题答案: 同意Subir Kumar Sao和Faiz。

  • 当我在文本字段中输入文本时,它会被删除。 代码如下:

  • 问题内容: 我正在尝试我的React.js的第一部分,并在很早的时候就陷入了困境…我有下面的代码,该代码将搜索表单呈现为。但是,在搜索框中输入内容无济于事。 大概在通过道具并上下移动时会丢失一些东西,这似乎是一个常见问题。但是我很沮丧-我看不到缺少的东西。 (最终,我会使用其他类型的,但是我只是想让这一类正常工作。) 问题答案: 您尚未将道具放在机箱中。它必须在JSX中。 在文档中充分考虑了将 p

  • 我有一个HTML元素. 加载页面后,我可以使用从该元素获取文本。 但随后我点击这个元素并更改里面的文本(例如,改为“已编辑”)。DOM中没有任何变化,包括属性 的值(即仍然返回“initial”,并且DOM中的元素看起来像) 如何提取现在在浏览器中可见的值(即字符串“已编辑”)?我需要执行一些JavaScript或其他东西吗?

  • 问题内容: 我正在将一个控制台应用程序转换为使用Swing的应用程序。目前,我希望我的程序执行与此类似的操作,如何通过使用或类似方法实现此目标? 简而言之; 在用户在文本字段中输入内容并按Enter之前,如何保持程序的执行。 问题答案: 更新: 因此,您要等待用户从GUI输入内容。这是可能的,但由于GUI在另一个线程中运行,因此需要进行 同步 。 因此,步骤如下: 创建一个“ holder”对象,