javascript Cypress -始终将元素聚焦到距屏幕顶部的给定偏移量

i1icjdpr  于 2022-12-21  发布在  Java
关注(0)|答案(3)|浏览(134)

当我在Cypress中运行测试时,它总是向下滚动到元素,所以它在屏幕的最顶部。但我在为WordPress系统编写测试时,固定栏总是在屏幕的顶部,占用了75px(ish)。所以当我的测试运行时,我永远看不到发生了什么。
有没有一种方法,我可以为所有的测试定义 * all * 元素,这样当它们在焦点上时,它们从顶部开始是200px的?就像一个全局常量一样?

    • 代码**
cy.get( 'tr[data-slug="cmb2"]' ).should( 'have.class', 'active' );
    • 请看这里的问题:**

解决方案尝试1:在.env配置文件中设置

如果我能在cypress.json-文件中设置它,那就太聪明了。我读了Cypress配置上的文档,但是在那里找不到它。

解决方案尝试2:使用CSS隐藏管理员栏

当在后端运行Cypress测试时,我也可以尝试添加一个样式表来始终加载,但是这是一个正常的解决方法吗?
即使我这么做了,我也不知道该怎么做。

解决方案尝试3:使用scrollIntoView

我尝试添加scrollIntoView和一些选项:

cy.get( 'tr[data-slug="cmb2"]' ).scrollIntoView({ offset: { top: 150, left: 0 } }).should( 'have.class', 'active' );

但是我仍然看不到我的div的标题,我也试过the solution suggested here,看起来有点像它。

解决方案尝试4:将滚动行为添加到我的.env文件

我把它添加到我的.env文件中:

{
   "env": {
      "name": "staging",
      ...
   },
   "viewportWidth": 1100,
   "viewportHeight": 1800,
   "watchForFileChanges": false,
   "chromeWebSecurity": true,
   "scrollBehavior": "bottom"   <---- My attempt!
}

但没有雪茄:

相关问题

xoefb8l8

xoefb8l81#

我不确定你的WordPress站点,但以下内容适用于Cypress scrolling behaviour on get and relative positionning中引用的Material-UI站点

.scrollIntoView()偏移量应为负值

it('make Elvis appear', () => {
  cy.viewport(750,480)
  cy.visit('https://mui.com/getting-started/templates/dashboard/');

  cy.contains('Elvis Presley').scrollIntoView({offset:{top: -100}})
})

使用本机滚动进入视图

it('make Elvis appear', () => {
  cy.viewport(750,480)
  cy.visit('https://mui.com/getting-started/templates/dashboard/');

  // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
  cy.contains('Elvis Presley')
    .then($el => $el[0].scrollIntoView(false)) // scrolls $el to bottom
})

使标题透明

it('make Elvis appear', () => {
  cy.viewport(750,480)
  cy.visit('https://mui.com/getting-started/templates/dashboard/');

  cy.get('header').invoke('css', 'opacity', '0')
  cy.contains('Elvis Presley').scrollIntoView()
})

使用.scrollTo()

此命令应用于滚动容器,而不是目标元素,因此定位可能不是每次都正确。

function getScrollParent(node) {
  if (node == null) return null;

  if (node.scrollHeight > node.clientHeight) {
    return node;
  } else {
    return getScrollParent(node.parentNode);
  }
}

it('make Elvis appear', () => {
  cy.viewport(750,480)
  cy.visit('https://mui.com/getting-started/templates/dashboard/');

  cy.contains('Elvis Presley')
    .then($el => {
      const scrollParent = getScrollParent($el[0])
      cy.wrap(scrollParent).scrollTo('center')
    })
})
g2ieeal7

g2ieeal72#

实际上,在这个已经报告的here上有一个bug。Cypress Peeps修复了这个here。但是它需要合并。

2ledvvac

2ledvvac3#

通过get()、contains()、click()上的网站顶部菜单隐藏元素的解决方案。
将以下内容添加到Cypress全局配置或测试配置。
从我的cypress.config.ts(缩小到焦点):

import { defineConfig } from 'cypress'

export default defineConfig({

  e2e: {
    scrollBehavior: false
  }
})

然后使用cy.scrollTo()、cy.scrollIntoView()、动态等“手动”滚动
参考文献:

相关问题