【问题标题】:Cypress click element by ID / XPATH / Name?赛普拉斯按 ID / XPATH / 名称单击元素?
【发布时间】:2019-07-04 11:02:18
【问题描述】:

我想通过 XPATH/ID 而不是默认的 cypress 定位器点击一个元素,可以吗?

在 selenium 中,我可以使用 XPATH 查找元素,例如:

d.findElement(By.id("category")).click();

在赛普拉斯中是这样的:

cy.get('#hdtb-msb-vis > :nth-child(3) > .category').click()

我可以按 ID 进行点击吗? (在 selenium 中看起来更好!)

d.findElement(By.id("category")).click();

VS

cy.get('#hdtb-msb-vis > :nth-child(3) > .category').click()

【问题讨论】:

    标签: automation cypress


    【解决方案1】:

    在赛普拉斯中,它是这样工作的:

    cy.get('button[id="category"]').click()
    

    请注意,我只是在这里使用按钮作为示例,您应该将其替换为元素的标签:div、select、textarea 等...

    【讨论】:

    • 谢谢!如何按文字点击?说我有:添加新用户,我想点击文本
    • 我投了反对票,因为问题是“使用 xpath”,并且接受的解决方案不使用 xpath。
    【解决方案2】:

    我认为,可以按照赛普拉斯网站的建议添加plug-in,请参考以下链接https://docs.cypress.io/plugins/#content。如果您参考自定义命令部分,您会看到cypress-xpath,它会将您带到以下 github 链接 https://github.com/cypress-io/cypress-xpath

    npm install -D cypress-xpath
    

    然后包含在你项目的 cypress/support/index.js 中

    require('cypress-xpath')
    

    下面给出的示例用法:

    it('finds list items', () => {
      cy.xpath('//ul[@class="todo-list"]//li')
        .should('have.length', 3)
    })
    

    请在安装插件并更新support/index.js文件后尝试。

    【讨论】:

    • 感谢您的精彩回答!
    • 谢谢你的伙伴!
    【解决方案3】:

    如果尝试在 cypress 中使用 xpath,需要做两件事:-

    1. 在文件夹 'YourProject'->'cypress'->'support' 下的文件 'index.js' 中,添加条目“require('cypress-xpath')”
    2. 在文件夹 'YourProject'->'configuration'->'docker' 下的文件 'Dockerfile.cypress' 中,添加条目“RUN npm install cypress-xpath”

    这就是使用所有 xpath 函数唯一标识 cypress 测试中的所有元素所需的全部内容。 我个人更喜欢使用 xpath,因为这让我可以更好地控制 UI 元素。希望这将使使用 cypress 的生活更轻松。

    【讨论】:

      【解决方案4】:

      #hdtb-msb-vis 是一个 ID 选择器,.category 是一个类选择器。但是你应该可以纯粹通过类选择器来选择

      cy.get('.category')
        .click()
      

      但如果该类不是唯一的,您可以通过 ID 和类单击它:

      cy.get('#hdtb-msb-vis')
        .find('.category')
        .click()
      

      【讨论】:

      • 这不是我问的,我问的是 Cypress 是否可以通过 ID/XPATH 而不是类选择器点击。
      • 让我好奇你在说什么类型的 ID,因为 .category 是一个 CSS ID 选择器,但显然这不是你要找的 ID?
      【解决方案5】:

      第一个问题包含两个不同的选择器,第一个 (selenium) 查找 id 类别,第二个查找类类别。

      事实上:

      d.findElement(By.id("category")).click();
      ==
      cy.get('#category').click()
      

      所以是的,您可以通过它的 ID 选择一个元素!

      如果(我不认为)您希望有其他可能性来选择您的元素,请查找 jquery 选择器 (jquery is exposed in cypress)

      【讨论】:

        【解决方案6】:

        执行npm install -D cypress-xpath

        如果您使用打字稿。在 cypress/support/index.d.ts 中添加一个文件

        添加 import './commands'; import '../../node_modules/cypress-xpath';

        "types": ["cypress", "cypress-xpath"] in tsconfig.json
        

        还在 index.js 文件中添加import '../../node_modules/cypress-xpath

        【讨论】:

          【解决方案7】:

          对于 ID,请使用 # 和 .类

          cy.get('#category').click()
          

          没有直接使用 ID、名称、类、标签名称的方法。使用 css 选择器或各种内置 cypress 命令来查找元素。

          对于 Xpath,赛普拉斯没有对 XPath 的默认支持。按照以下步骤安装插件并使用它。

          第 1 步: 使用以下命令安装 XPath 插件

          npm install cypress-xpath
          

          yarn add cypress-xpath --dev
          

          第 2 步将此行添加到 support 文件夹中的 index.js 中

          require('cypress-xpath')
          

          第 3 步像这样在 xpath 命令中添加您的 xpath

           cy.xpath("//input[@id='edit-name']").type('Naruto')
          

          详细步骤请参考this

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-07
            • 2018-12-17
            相关资源
            最近更新 更多