单击赛普拉斯中的完全匹配文本

     2023-02-15     248

关键词:

【中文标题】单击赛普拉斯中的完全匹配文本【英文标题】:Click an exact match text in Cypress 【发布时间】:2019-10-19 23:43:39 【问题描述】:

在 Cypress 中,.contains 命令会生成所有匹配的元素,因此对于单击带有文本的下拉项,.contains 可以正常工作。但是我遇到了一个问题,我需要单击文本为“导航标签”的下拉项目:问题出现了,因为在同一个下拉列表中还有另一个选项,称为“新导航标签”,而是被按下,因为它首先出现。

有没有办法点击一个与你想要的文本完全匹配的元素?

Given('I click on the string drop down option', option => 
  cy.get(`[data-test="dropdown"]`)
    .find('.item')
    .contains(option)
    .click();
);

我使用.last() 部分解决了这个问题,但我发现这个解决方案非常模糊,因为我试图让我的步骤尽可能地可重复使用,而这只是一个补丁,可以让它在这个特定问题中发挥作用。

请注意,无法对下拉列表中的每个特定项目进行数据测试,因为项目是直接从语义 UI 呈现的。

【问题讨论】:

您可以使用regex,这可以与开始和结束锚点完全匹配。 在这个例子中我如何使用正则表达式?我在想像.contains(/^(option)/g) 这样的东西可以工作,但我不知道该怎么做,这不是option 部分。 嗯,这会从字面上匹配单词选项,而不是该变量的内容。也许阅读如何从变量创建正则表达式? const exp = new RegExp(`^($option)`, "g"); 这终于使它对我有用。谢谢老哥! 【参考方案1】:

正则表达式在这里可以很好地工作。

.contains() allows for regex 所以你可以做一个只匹配整个字符串的正则表达式(使用^$)。这样任何带有额外字符的东西都不会匹配(如新导航标签)。例如,你可以这样做:

  cy.get(`[data-test="dropdown"]`)
    .find('.item')
    .contains(/^Navigation Label$/)
    .click();

当您使用变量(例如您的 option 变量)构建表达式时,正则表达式有点棘手。在这种情况下,你会像这样build a regular expression:

  cy.get(`[data-test="dropdown"]`)
    .find('.item')
    .contains(new RegExp("^" + option + "$", "g"))
    .click();

所以要与.contains() 完全匹配:

cy.contains(new RegExp(yourString, "g"))

【讨论】:

在这种情况下似乎不需要 g 标志。 这对我有用,因为@rooby 建议 g 标志似乎没有必要 不确定为什么会收到此警告:参数类型 RegExp 不可分配给参数类型字符串 |号码 | RegExp 类型 RegExp 不能分配给 RegExp 类型【参考方案2】:

您可以使用下面的代码 sn-p 单击具有精确文本的元素。这就像魅力一样,如果您遇到任何问题,请告诉我。

您必须在 cypress 中进行如下处理,这相当于 selenium webdriver 中的 getText()。

clickElementWithEaxctTextMatch(eleText) 
  cy.get(".className").each(ele => 
    if (ele.text() === eleText) 
      ele.click();
    
  );

【讨论】:

如何验证赛普拉斯中的悬停文本(工具提示)?

】如何验证赛普拉斯中的悬停文本(工具提示)?【英文标题】:Howtoverifythehovertext(tooltip)inCypress?【发布时间】:2021-09-1015:32:00【问题描述】:arrow_back我已尝试使用以下代码,但不起作用。对于chrome,它表示超时。对于边缘,... 查看详情

赛普拉斯 - 检查按钮是不是存在,如果存在则单击它

】赛普拉斯-检查按钮是不是存在,如果存在则单击它【英文标题】:Cypress-checkingforthepresenceofabuttonandclickingonitifitisthere赛普拉斯-检查按钮是否存在,如果存在则单击它【发布时间】:2021-09-1823:54:39【问题描述】:使用赛普拉斯... 查看详情

如何期望日期包含赛普拉斯中的另一个日期?

】如何期望日期包含赛普拉斯中的另一个日期?【英文标题】:HowtoexpectthedatetocontainanotherdateinCypress?【发布时间】:2022-01-0704:30:32【问题描述】:这将是我在这里提出的最愚蠢的问题。我正在经历赛普拉斯自动化并正在研究其中... 查看详情

单击超链接时能够防止/停止在赛普拉斯中加载“页面加载”

】单击超链接时能够防止/停止在赛普拉斯中加载“页面加载”【英文标题】:Abilitytoprevent/stoploading\'Pageload\'inCypresswhenclickedahyperlink【发布时间】:2022-01-1715:05:00【问题描述】:在我的赛普拉斯测试中,我需要测试一个链接,该... 查看详情

赛普拉斯 - 使 contains() 以不区分大小写的方式工作的方法

】赛普拉斯-使contains()以不区分大小写的方式工作的方法【英文标题】:Cypress-waytomakecontains()workincase-insensitiveway【发布时间】:2019-04-1920:08:38【问题描述】:我有一个项目没有利用HTML级别,并且HTML中的值大小写不一致。如果我... 查看详情

赛普拉斯:如何将文本值/文本元素与 .each() 进行比较

】赛普拉斯:如何将文本值/文本元素与.each()进行比较【英文标题】:Cypress:Howtocomparetextvalues/textelementswith.each()【发布时间】:2021-12-1104:01:42【问题描述】:我尝试读出一个表格并比较所有文本值。如果有两次相同的值,则测试... 查看详情

赛普拉斯:测试元素是不是不存在

...【发布时间】:2018-08-0114:47:30【问题描述】:我希望能够单击一个复选框并测试一个元素是否不再在赛普拉斯的DOM中。有人可以建议你怎么做吗?//ThisistheTestwhenthecheckboxisclickedandtheelementistherecy.get(\'[typ 查看详情

访问新网址赛普拉斯

...“路由系统”手动更改window.location.hash。在某些时候,我单击了一个更改哈希的按钮,因此应该在测试期间更改页面。我可以在执行过程中看到一个“新url”条目,但是如何让cypress访问该url?简而言之,问题是什么:您可以看到... 查看详情

赛普拉斯点击不会触发操作

...钮+时,价格会相应变化。但是当我使用Cypress时,我可以单击增加按钮,产品数量发生变化但价格保持不变。就像事件从未被触发一样。是否有类似toHaveBeenCalledWith或任何我应 查看详情

如何在赛普拉斯中选择一个数组?

...一个数组。我有这个元素"cy.get(".link.nav-link")[0]"当我尝试单击元素时,cypress向我返回:“无法读取未定义的属性\'click\'”下面我添加我的代码classHomegetservices()returnc 查看详情

赛普拉斯 - 如何验证文件是不是已下载?

...我想检查一个文件是否在我的测试中被下载。我只需要在单击按钮后确认文件已下载。我不需要阅读文件及其内容。我下载的所有文件都是zip文件,不知道这是否会使它们更难阅读?it(\'Initiatedownload\', 查看详情

尝试从赛普拉斯中的元素获取属性时出错

】尝试从赛普拉斯中的元素获取属性时出错【英文标题】:ErrortryingtogetattributefromelementinCypress【发布时间】:2018-12-1304:39:21【问题描述】:我有这个HTML元素:<inputid=""type="text"name="last_name"value="Userc7bff2d0-7faf-11e8-9884-8fe4c5df7f77-Upd... 查看详情

赛普拉斯:如何比较与从表中读出的字符串/文本连接的不同数据类型

】赛普拉斯:如何比较与从表中读出的字符串/文本连接的不同数据类型【英文标题】:Cypress:howtocomparediffrentdatatypesconcatinatedwithString/textreadoutfromtables【发布时间】:2021-12-2109:53:27【问题描述】:我想比较与文本混合的双值(75.999)... 查看详情

赛普拉斯 - iframe 处理

】赛普拉斯-iframe处理【英文标题】:Cypress-iframehandling【发布时间】:2021-12-0709:44:08【问题描述】:我有一些代码试图捕获iframe中的元素,但我总是被抛出一个错误it(\'SendMedication\',function()cy.get(\'.aut-iframe\').should(iframe=>expect(ifra... 查看详情

如何将日、月和年添加到赛普拉斯中的选定日期

】如何将日、月和年添加到赛普拉斯中的选定日期【英文标题】:Howtoadddays,monthandyeartotheselecteddateincypress【发布时间】:2021-10-0419:44:46【问题描述】:Cypress时刻不起作用。将日、月和年添加到当前或选定日期的任何其他解决方... 查看详情

赛普拉斯 - 无法查看/捕获弹出窗口

...—点击它会弹出一个弹出窗口。我能够找到该链接,但是单击该链接会导致“未捕获的异常TypeError:无法读取属性弹出窗口...”。如果我抑制异常测试通过但我仍然看不到弹出窗口。我尝试过等待,但没有成功。如果有人遇到类... 查看详情

每次在赛普拉斯中生成具有动态名称的文件时读取它?

...具有静态名称的文件的情况,在我的情况下,我必须读取单击 查看详情

赛普拉斯在开玩笑断言中导致类型错误

】赛普拉斯在开玩笑断言中导致类型错误【英文标题】:Cypresscausingtypeerrorsinjestassertions【发布时间】:2020-03-1819:29:06【问题描述】:我一直在使用react-testing-library和@testing-library/jest-dom/extend-expect。我昨天安装了Cypress,现在我的... 查看详情