我正在使用Selenium为React开发的Web应用程序编写端到端测试。在检查网站时,我发现实际上没有一个html元素具有id属性集。
由于我们的开发团队忙于做其他事情,我应该自己解决这个问题。到目前为止,我已经通过使用css选择器和xpath在我的测试中定位元素来解决这个问题。
但是,我觉得这种方法很容易出错,因为我没有特别参与开发过程,所以我可能不会立即知道网站结构的变化。
为了使测试更加健壮,我想通过他们的id属性找到我的大部分元素。如果站点是在react框架之外编写的,我只需将id属性添加到html文档中的所需元素即可。
在没有完全理解React源代码的情况下,有没有办法让我这样做?
React是一个用于构建用户界面的JavaScript库。 React可以更轻松地为应用程序中的每个状态设计简单视图。当应用程序数据发生变化时,React可以有效地更新和呈现正确的组件。声明性视图使您的代码在调试时更加可预测和更容易。由于组件逻辑是用JavaScript而不是模板编写的,因此您可以轻松地通过应用程序传递丰富的数据,并将状态保持在HTML DOM之外。这反过来有助于构建管理其自身状态的封装组件,然后组合它们以制作复杂的UI。
render()
是生命周期中存在于多个生命周期阶段的一种方法。它出现在这里诞生,这是我们在成长中花费大量时间的地方。
render prop
是指使用其值为函数的prop来在React组件之间共享代码的技术。具有render prop的组件接受一个函数,该函数返回一个React元素并调用它而不是实现自己的渲染逻辑。一个例子:
<DataProvider render={data => (
<h1>Hello {data.target}</h1>
)}/>
React组件实现了render()
方法,该方法获取输入数据并返回要显示的内容。传递到组件的输入数据可以通过render()
访问this.props
。以下示例使用类似XML的语法JSX:
码:
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同样足以根据静态和动态属性定位和识别元素。
您可以在以下位置找到相关的讨论: