我可以将id属性添加到使用React创建的html元素中吗

时间:2019-03-04 14:33:49

标签: javascript reactjs selenium xpath css-selectors

我正在使用Selenium为在React中开发的Web应用程序编写端到端测试。检查网站后,我发现几乎所有html元素都没有设置id属性。

由于我们的开发团队正忙于做其他事情,所以我应该自己解决这个问题。到目前为止,我已经通过使用CSS选择器和xpath在测试中定位元素来解决此问题。

但是,我觉得这种方法很容易出错,并且由于我没有特别参与开发过程,所以我可能不会立即了解网站结构的变化。

为了使测试更可靠,我想通过其id属性找到我的大多数元素。如果该网站是在react框架之外编写的,则只需将id属性添加到html文档中所需的元素即可。

在没有完全了解React源代码的情况下,我有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

反应

React是用于构建用户界面的JavaScript库。 React使您可以更轻松地为应用程序中的每个状态设计简单视图。当您的应用程序数据更改时,React可以有效地更新和呈现正确的组件。声明式视图使您的代码在调试时也更加可预测和更容易。由于组件逻辑是用JavaScript而不是模板编写的,因此您可以轻松地通过应用程序传递丰富的数据,并将状态保持在HTML DOM之外。反过来,这有助于构建封装的组件来管理其自身的状态,然后将它们组合成复杂的UI。


render()

render()生命周期中的一种方法,存在于多个生命周期阶段。它发生在出生中,这是我们在成长中花费很多时间的地方。


渲染道具

render prop是指一种使用价值为函数的prop在React组件之间共享代码的技术。具有渲染道具的组件采用返回React元素并调用它的函数,而不是实现自己的渲染逻辑。一个例子:

<DataProvider render={data => (
  <h1>Hello {data.target}</h1>
)}/>

反应成分

反应组件实现render()方法,该方法获取输入数据并返回要显示的内容。 render()可以通过this.props访问传递到组件的输入数据。下面的示例使用一种称为JSX的类似XML的语法:

代码:

class HelloMessage extends React.Component {
  render() {
    return (
      <div>
    Hello {this.props.name}
      </div>
    );
  }
}

ReactDOM.render(
  <HelloMessage name="CrispJam" />,
  document.getElementById('hello-example')
);

结果:

Hello CrispJam

结论

因此,在没有完全了解的情况下,没有的方法来编辑React源代码。但是Locator Strategies同样足以根据静态和动态属性来定位和标识元素。

您可以在以下位置找到相关的讨论