如果您对所使用的语言和框架不满意,自动检查文本(及其 HTML)可能是一个挑战。学习和探索的时间有限本身就是一个挑战。我为项目自动化烟雾测试的任务之一是验证每个环境中的文本,每个特定设置都有自己的欢迎消息。而且,我承认,我不太确定从哪里开始。我知道我需要什么,也知道从哪里可以得到它。但将所有部分组合在一起并不像看起来那么简单。
我一开始需要获得数据库访问权限。然后使用我们的设置来确保我可以使用应用程序设置(告诉框架在哪里查找信息并使用配置设置来保持信息私有)在运行期间与数据库连接。然后我可以将各个部分组合在一起,并从数据库中获取信息,并将其与显示的信息进行比较以进行测试。
手动操作很简单 - 我应该猜到这意味着它不会像我希望的那么容易。查看 HTML 并验证布局是否正确非常简单。我对简单的 HTML 布局有足够的了解,这是一次快速检查,以确保单词正确并继续。由于某种原因,我进行了多次冒烟测试以进行手动验证。在这个和我需要检查的事情列表之间,我将被鼓励去学习、探索和寻求帮助以使这个自动化成功,并将其应用到其他测试中。
创建数据库访问(以及正确的连接字符串!)后,我就可以将页面的文本设置为变量。这是最简单的部分:我知道我在这里做什么,并且在完成它时感到很有成就感。我运行了 Playwright 测试,期望页面上的文本按单词匹配,但不匹配 HTML 组件。我是对的 - 正确的单词就在那里,但由于添加了 HTML,测试失败了。
研究时间!第一次尝试是使用 Page.ContentAsync(),这是获取页面完整 HTML(包括标题)的命令。这应该允许我搜索它,并找到文本的子字符串,对吗?作为第一个想法,这并不太可怕——我保存了我要查找的 HTML,我所需要做的就是遍历整个文档内容来找到它。效率不高,当然也不是好的做法!它应该能得到我需要的结果,然后可以迭代。
没有。在整个页面中找到子字符串不可能很快,而且我希望我的自动化能够很快。经过几十次尝试让它按照我想要的方式工作并牢记业务规则(如果你无法在 45 分钟内解决它,那么是时候询问其他人了),我与开发商之一。我知道他们很忙,正在创建一个非常需要的更新:会议结束时附有“如果需要,我们可以重新安排”的注释。
在等待会议的同时,我继续对此大惊小怪:缩小范围的挑战之一是 div 的类 - 它的命名不好,并且使用 Bootstrap,可能会出现重复的 div同一个名字让我在其他页面上遇到了问题。与一个比我在这里待得更久的人交谈时,我发现这始终是页面上的第三个 div。
现在我有了一个新的计划来找到它 - 使用 Nth() 定位器,并找到正确的 div。我很想解决这个问题,写下我现在正在输入的帖子,并在会议之前讨论下一个问题。正如你们中的许多人可能知道和/或怀疑的那样,这是紧急事件发生的一个很好的触发因素,而且确实如此。这些计划在组织者中逐页复制了好几天,直到我们结对开发的时候。
与这位开发人员合作总是一种享受:我们有很多共同点并且彼此尊重。作为奖励,他们擅长教学!在快速回顾了目标是什么之后,我们回顾了我为解决这个问题所做的尝试。我留下了最后一篇,其中包含 IDE 中的错误,希望对您有所帮助。现在要取得进步!
使用调试器,我们验证了 HTML 是否被正确拉入。这是我没有完全检查过的一个领域——值得庆幸的是它是正确的。我们一致认为 div 名称不是很有用——他们最近所做的工作已经创建了具有相同名称的其他 div,但位于不同的页面上。这一点已被注意到,但直到我在测试中达到这一点才被搁置。
需要他们拥有的 NUnit 技能 - 验证此部分的更简单方法是使用 AreEqual 命令。这允许测试检查字符串是否相等。剧作家很固执。它需要的是定位器而不是字符串——或者相反——这只是需要太多的时间来制作。我很高兴学习这项技术 - 我认为它在未来很有用!
经过几次尝试让 Nth() 工作后,我们求助于使用那个奇怪的 div 类——在确保它只在页面上使用了一次之后。这给了我们一个起点——现在要弄清楚如何将 HTML 放入其中(幸运的是,这是该特定 div 中唯一的东西)。又经历了几次错误的开始,我最终放弃了该 div 的 ContentAsync() 不起作用的想法,引导他们找到我尝试过但放弃的解决方案。
InnerHtmlAsync() 为我们提供了 div 的确切内容!空间等等。这是下一个绊脚石——我们已经没有时间参加会议了。值得庆幸的是,他们愿意再给我几分钟时间,主要是因为这是他们之前已经解决的问题。只需要删除空格的语法:如果您好奇,请替换(“”,“”)。然后让测试运行,直到我为手动验证添加的下一个 PauseAsync() 将其停止一会儿。
他们去吃午饭了,我花了接下来的时间准备笔记。我还有其他东西要找——现在更多的是如何去做的线索。
以上是比较 Playwright .NET 中的 HTML的详细内容。更多信息请关注PHP中文网其他相关文章!