【问题标题】:Identifying elements on a ReactJS webpage using Selenium, is their a better way?使用 Selenium 识别 ReactJS 网页上的元素,是更好的方法吗?
【发布时间】:2019-06-12 18:32:03
【问题描述】:

我正在尝试在使用 reactjs 构建的网页上使用 Selenium 编写网络驱动测试。我可以通过 xpath 抓取我的元素,但这并不理想而且非常有限。

  1. 如果网站发生任何更改,xpath 将不起作用。
  2. 所有类名都是相同的,没有其他要抓取的属性,类名也会发生变化,因为它们是由 react 动态构建的。
  3. 没有其他属性可供使用。
  4. 不能使用 CSSSelector,因为 CSS 名称也是由 react 构建的。

当我想要一个特定元素时,我的主要问题不断出现,例如我刚刚构建的元素或如何操作列表中的特定元素。

对于我尝试编写的每个测试,我总是遇到同样的问题,没有唯一标识符。我不熟悉 reactJs,但这是 Selenium 的常见问题吗?

【问题讨论】:

  • 听起来像 React 组件,它们的设计对 React 单元测试之外的可测试性为零。你说得对,使用 XPath 会让人流泪。开发组件的人应该提供某种形式的不会改变(或至少不会改变太多)的身份。 如何类名是如何构造的并不重要;使用一致的东西来允许外部集成测试只是一个好主意。
  • 是的,这个网页最初是在没有自动化测试意图的情况下创建的。那么在目前的状态下,有没有办法在这种环境中使用硒呢?
  • @Jesse Bell,XPath 与 CSS 选择器或 ID 一样可靠。使定位器脆弱的原因是树依赖性和依赖于自动生成/无意义的属性。例如by.xpath("id('myid')")by.css("[id='myid']")by.id("myid") 一样可靠。请注意,您还可以选择使用 JavaScript 注入或 XPath(.//*[not(./*)][normalize-space()='my text'].//*[string()[contains(., 'my text')]])通过文本定位元素。

标签: reactjs selenium testing


【解决方案1】:

通常的做法是在 HTML 元素上使用 data-test 属性来协助基于浏览器的测试;无论是静态的还是由 JS 框架呈现的;我建议您要求开发人员在整个代码库中包含这些属性,以便您轻松定位要测试的元素,而不必担心类名或 id 属性的变化。

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多