【问题标题】:Simple way to find html-element which has been rendered by React查找已由 React 渲染的 html-element 的简单方法
【发布时间】:2019-06-10 22:16:42
【问题描述】:

对于 Selenium 的快速搜索元素,我认为它必须是一种简单的方法,将一些属性设置为 html-elements,例如:将 React Component Key 转换为 data-attribute(如果可能的话)。

当然,我可以将 id 或数据属性写入我的 span、div 和我的组件中的任何内容,但我无法使用 3d 方库的组件来执行此操作 - 这些组件可能没有像“id”这样的道具,我将不得不包装这些组件,然后通过标签或类找到它们......

或者也许是 webpack 的插件,用于为具有组件名称的元素设置数据属性。

但是,您如何在 React 应用渲染中找到元素?

我认为按类或标签查找元素不是一个好主意

这样的按键变换

    <MyComponent key="SuperComponent" />
    ...
    <div data-attr="SuperComponent">...</div>

或像这样自动设置组件名称的属性

    <MySuperComponent />
    ...
    <div data-attr="MySuperComponent">...</div>

【问题讨论】:

  • 如果 data-attr="SuperComponent" 对页面上的那个元素是唯一的,那么它就像一个 ID。
  • @JeffC 当然唯一元素必须有 ID 而不是一些数据属性,但问题不在于它
  • 不,您不必拥有 ID 即可在页面上唯一地定位元素。我的问题是属性/值data-attr="SuperComponent" 在页面上是否唯一。如果是这样,您可以使用它而不是在所有东西上放置 ID。例如,在开发控制台中运行 $$("div[data-attr='SuperComponent']") 并查看它是否仅返回 1 个元素。如果是这样,那么您就有了一个唯一的定位器。

标签: html reactjs selenium webpack attributes


【解决方案1】:

“测试自动化Selenium” 的角度来看,HTML 是否由 iddata-attributes 组成几乎无关紧要时间>。在使用 Selenium 时,测试是在任何有效的&lt;tag&gt; 和相关的属性 的帮助下编写的。然而,Locator Strategies 的首选列表如下:

如何在 React 应用渲染中找到元素?

AUT(被测应用程序) 是基于 ReactJS 的粗略元素,该元素将具有动态属性。 定位器策略也可以是动态的。您可以在How to locate a button with a dynamicID

的讨论中找到 Dynamic Locator Strategies 的示例用法

最后,虽然 Test Automation 快速移动的 WebDriver 实例需要与滞后的浏览器同步。可以在Do we have any generic funtion to check if page has completely loaded in Selenium找到相关讨论

【讨论】:

  • 好的,我可以为每个测试的元素使用 id,但是如何设置 id(处理编写它不是解决方案,我们需要自动化一切:))
  • 真的,我不相信在反应世界中不是将组件名称或组件键转换为元素 ID 的简单方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2018-08-01
  • 2018-01-06
  • 2017-10-29
相关资源
最近更新 更多