Cypress + Dom 测试库:getByText 找不到输入值
Cypress + Dom Testing Library: getByText does not find input's value
我正在使用带有 Cypress Testing Library 的 Cypress 来测试我的 React 应用程序。
我有一个以名称 ('Steve') 作为值的输入,我正在尝试使用 cypress 查找它,如下所示:
// In the component:
<input defaultValue="steve" />
// In the spec file:
cy.getByText(/steve/i).should('exist');
但是Cypress没有找到这个元素,测试失败。如果我将输入更改为 div:
<div>Steve</div>
有效(但我需要渲染输入)。赛普拉斯(和 Dom 测试库)如何找到输入的值?
我找到了答案。 getByText()
找不到 <input />
的值。 getByDisplayValue()
确实如此。我不喜欢那样,因为这使得它有点依赖于实现细节,但至少这修复了测试。
无需挂载react组件即可识别元素。如果您正在与源代码隔离测试您的 React 应用程序或编写功能性 UI 测试用例,您可以考虑一个名为 cypress-react-selector 的 Cypress 插件。它可以帮助您通过组件、道具和状态识别 Web 元素,即使在缩小之后也是如此。在这种情况下,您需要使用 React Dev Tool 来识别组件名称。
这是一个例子:
假设你的 React 应用:
const MyComponent = ({ someBooleanProp }) => (
<div>My Component {someBooleanProp ? 'show this' : ''} </div>
)
const App = () => (
<div id='root'>
<MyComponent />
<MyComponent someBooleanProp={true} />
</div>
)
ReactDOM.render(<App />, document.getElementById('root'))
然后你可以像这样简单地识别反应元素:
cy.react('MyComponent', { someBooleanProp: true })
因此,您可以尝试以下方法:
cy.react('Input',{defaultValue:"steve"}).should('exist');
查找更多示例测试here
希望对您有所帮助!
因为 getByText() 方法始终 returns innerText 的值,这就是为什么当您指定 <div defaultvalue='XYZ'/>
时,它不起作用。
您也可以在 DevTools 控制台中查看...
<div id='name'>XYZ</div>
document.getElementById('name').innertText will return you XYZ
我正在使用带有 Cypress Testing Library 的 Cypress 来测试我的 React 应用程序。
我有一个以名称 ('Steve') 作为值的输入,我正在尝试使用 cypress 查找它,如下所示:
// In the component:
<input defaultValue="steve" />
// In the spec file:
cy.getByText(/steve/i).should('exist');
但是Cypress没有找到这个元素,测试失败。如果我将输入更改为 div:
<div>Steve</div>
有效(但我需要渲染输入)。赛普拉斯(和 Dom 测试库)如何找到输入的值?
我找到了答案。 getByText()
找不到 <input />
的值。 getByDisplayValue()
确实如此。我不喜欢那样,因为这使得它有点依赖于实现细节,但至少这修复了测试。
无需挂载react组件即可识别元素。如果您正在与源代码隔离测试您的 React 应用程序或编写功能性 UI 测试用例,您可以考虑一个名为 cypress-react-selector 的 Cypress 插件。它可以帮助您通过组件、道具和状态识别 Web 元素,即使在缩小之后也是如此。在这种情况下,您需要使用 React Dev Tool 来识别组件名称。
这是一个例子:
假设你的 React 应用:
const MyComponent = ({ someBooleanProp }) => (
<div>My Component {someBooleanProp ? 'show this' : ''} </div>
)
const App = () => (
<div id='root'>
<MyComponent />
<MyComponent someBooleanProp={true} />
</div>
)
ReactDOM.render(<App />, document.getElementById('root'))
然后你可以像这样简单地识别反应元素:
cy.react('MyComponent', { someBooleanProp: true })
因此,您可以尝试以下方法:
cy.react('Input',{defaultValue:"steve"}).should('exist');
查找更多示例测试here
希望对您有所帮助!
因为 getByText() 方法始终 returns innerText 的值,这就是为什么当您指定 <div defaultvalue='XYZ'/>
时,它不起作用。
您也可以在 DevTools 控制台中查看...
<div id='name'>XYZ</div>
document.getElementById('name').innertText will return you XYZ