测试自动化中的GUI映射策略

4

In my test automation practice I always use a gui mapping strategy that reduces a maintenance effort.

So for example, if I need to identify the "Google Search" button (www.google.com), its XPAth will be

//input[@name='q']
rather than
/html/body/center/form/table/tbody/tr/td[2]/input[3]
It's clear that in the second case a little change in a page structure could break my test.

But maybe I'm missing something? Maybe if a document structure changes I should know about this and some of my tests should fail?

What do you think? What best-practice you will recommend?

3个回答

4
如果元素具有在脚本和CSS中使用的 ID,则在测试中我们将使用该 ID。否则,我们会主动为测试仪器化我们的 HTML。我的意思是,我们可以添加一个专门用于测试的 ID,以避免任何歧义。通常我们会给它加上前缀,例如 id="ftGoogleButton"。这样处理是为了让仅与 HTML 打交道的人知道该元素与自动化测试相关联。这种约定是实用的,因为他们通常只会在 CSS/JS 中寻找特定 ID 的引用。

你的意思是每次需要为测试目的添加一个HTML元素时,都会为其添加一个“id”属性吗? - legesh
是的,每次我们从外部 webtest 引用它时。如果它没有 id,我们会添加它。我们有时也使用 "name"。 - krosenvold

3
我会和你一样,选择第一种方案而不是第二种……对于大多数测试来说。
你希望你的测试在与测试覆盖的功能相关的更改时断言失败,并且希望同样的测试忽略应用程序中的大多数其他更改。
所以,如果你正在检查搜索“foo”应该返回超过零个文档,那么这与页面结构无关,应该忽略这些更改。
然而,在编写旨在确保搜索表单配备提交按钮的测试时,你需要将这些假设体现在用于从表单导航到按钮的XPath中。

2
如krosenvold所说,让开发人员标准化使用html的name和/或id属性,并使用这些属性是最好的策略之一。我的论文“将测试自动化作为开发需求”讨论了这个话题以及其他开发人员可以采取的措施,使应用程序更易于自动化。
您还应确保所有对象识别属性存储在一个中央存储库中,以便于任何后续维护。大多数商业工具都内置了此功能,但对于开源工具,您可能需要自己编写机制。

这篇论文非常易懂清晰。谢谢! - Alessandro Da Rugna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接