首页 > 解决方案 > 对 Dojo 工具包的 OpenTest 支持

问题描述

我正在尝试将 OpenTest 与使用 Dojo 工具包通过 IBM EGL 创建的 Web 应用程序一起使用。dojo 的问题在于它每次都会动态生成 id,因此它们不能用作定位器。此外,许多元素没有 xpath,因此也无法使用。

当我搜索“dojo”和“selenium”时,这似乎是一个常见问题,但我还没有找到任何解决方案。

其他测试工具对特定框架(例如 dojo)有“明确”支持,所以我认为它在技术上是可行的。

标签: dojoopentest

解决方案


这是一个网站的摘录,其中提出了同样的问题,OpenTest 支持构建宏,这些宏正是这个人能够用 .NET 代码做的事情。请参考下面的块引用以及来源

我使用 Selenium 测试由 dojo/dijit 和 asp.net MVC 构建的 Web 应用程序,到目前为止它运行良好。

我以前也遇到过和你一样的问题。在编写与它们交互的步骤时,我的方式是“不要考虑 dojo 小部件”。将它们视为普通的复杂 html 元素。在dojo解析你的widget之后,你需要在客户端浏览你的dom树,找到dijit的值节点或交互部分对应的真实dom元素并对其进行操作(在你的情况下为Click、SendKey或GetId)。

将小部件的一些常用操作包装到可以在项目中重用的 Helpers 中也是很好的。

下面是一个简单的 .NET 示例,用于测试 dGrid 中是否存在按钮,我只是使用 css 选择器来查找单元格,希望对您有所帮助:

       [Then("I can delete it at row '(.*)'")] 
        public void Then_I_can_delete_it_at_row(int rowIndex) 
        { 
            var nthRow = Browser.FindElementsChecked(By.CssSelector(".dgrid-content .dgrid-row-table")).ElementAt(rowIndex - 1); 
            var deleteBtnsInRow = nthRow.FindElementsChecked(By.XPath(".//span[text() = 'Delete']")); 
            Assert.AreEqual(1, deleteBtnsInRow.Count); 
        }

推荐阅读