我将使用robotframework来测试一个使用sencha extjs库的应用程序,我的问题是,使用这个库,每次添加新组件时都会动态生成id,因此我的robotframework脚本会不断变化,但这不是一个好主意。有人告诉我,其他测试框架都有这个任务的插件,但我在robotframework中找不到。提前谢谢。
发布于 2015-05-29 03:37:37
有很多方法可以访问页面上的元素,使用id只是其中一种方法。假设您使用的是Selenium2Library,您可以使用以下任何定位器策略(从Selenium2Library documentation):
Strategy Example Description
--------------- --------------------------------------- ---------------------------------
identifier Click Element | identifier=my_element Matches by @id or @name attribute
id Click Element | id=my_element Matches by @id attribute
name Click Element | name=my_element Matches by @name attribute
xpath Click Element | xpath=//div[@id='my_element'] Matches with arbitrary XPath expression
dom Click Element | dom=document.images[56] Matches with arbitrary DOM express
link Click Element | link=My Link Matches anchor elements by their link text
partial link Click Element | partial link=y Lin Matches anchor elements by their partial link text
css Click Element | css=div.my_class Matches by CSS selector
jquery Click Element | jquery=div.my_class Matches by jQuery/sizzle selector
sizzle Click Element | sizzle=div.my_class Matches by jQuery/sizzle selector
tag Click Element | tag=div Matches by HTML tag name
default* Click Link | default=page?a=b Matches key attributes with value after first '='请注意,尽管一些示例(比如xpath)显示了id的使用,但id可能不是必须的(显然,对于id=和identifier=除外)。xpath通常是最后的策略,因为您几乎可以引用文档中的任何内容。有关xpath的更多信息,可以从这里开始:http://en.wikipedia.org/wiki/XPath
发布于 2015-05-28 23:15:43
这不是一个很好的解决方案,所以希望其他人能找到一个插件或容易实现的东西。但是,如果找不到不同的方法,可以手动为每个Ext.js元素分配一个ID,方法是自己将每个元素的" ID“属性设置为一个惟一的ID。这不需要太多的工作,如果你给它们命名一些与它们是什么相关的东西,这将使ID更具人类可读性。
从Sencha文档中:
字符串id:
此组件实例的唯一id。
除了应用程序中的单例对象外,应该不需要使用此配置。使用id创建的组件可以使用Ext.getCmp全局访问。
不使用分配的ids,而是使用Sencha配置和ComponentQuery,后者提供了基于选择器的搜索,类似于DOM查询。Container类包含按选择器查询其后代组件的快捷方式方法。
请注意,此id还将用作包含HTML元素的元素id,该HTML元素将呈现给该组件的页面。这允许您编写基于id的CSS规则,以唯一地设置此组件的特定实例的样式,还可以使用此组件的id作为父元素来选择子元素。
来源:http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.AbstractComponent-cfg-id
发布于 2015-06-11 02:50:04
随着Selenium2Library 1.7的发布,用户现在可以创建自己的自定义定位器。您可以使用它来创建基于ext的组件查询的位置方案。只要应用程序的整体结构不会有太大变化,这可能就足够了。有关自定义定位器的详细信息,请参见Selenium2Library docs。
我已经在github上启动了一个用于S2L的附加库,您可以查看它以供参考,但它还没有完全完成。
此外,Ext只需指定id属性,就可以在组件上放置惟一的id。我建议将ids应用于您希望通过测试与之交互的所有元素,从而消除对复杂行为的任何需求,从而使界面自动化。
https://stackoverflow.com/questions/30509571
复制相似问题