selenium.click("gwt-uid-204"); // this is recorded from Selenium IDE
我点击了我的(gwt)java应用程序中的复选框。 gwt-uid正在改变,所以如果id改变了,那么我的应用程序中找不到我的元素。正则表达式对我不起作用,我不确定我做错了什么。谢谢你的帮助
selenium.click("gwt-uid-[0-9]);
我使用的是selenium 1.0.3,Java
答案 0 :(得分:15)
许多GWT元素都带有ensureDebugId(UIObject上的方法),允许您将Ids显式设置为元素以进行测试和调试。您还需要继承模块
<inherits name="com.google.gwt.user.Debug"/>
让它发挥作用。这样做的好处是,您可以通过在prod模式编译期间删除继承的模块来从生产部署中删除跟踪。因此,不会有代码更改来删除不必要的ID。
答案 1 :(得分:5)
你可以用3/4的方式做到这一点 可以查看此链接: 3 ways of dealing with GWT dynamic element Ids 其中讨论了为GWT元素分配静态ID的3种不同方法。
另外, 您可以编写一个自定义的javascript方法,它将动态获取所有ID。然后,您可以处理这些硒动作的ID。
答案 2 :(得分:0)
有两种可能的解决方案。第一个是通过说regex:gwt-uid- [0-9]告诉Se你正在使用正则表达式。正如你所拥有的那样,它正在寻找名称或id为文字字符串的元素。
另一个解决方案是打开我在http://element34.ca/blog/google-web-toolkit-and-id中讨论的内容的静态ID。
- 亚当
答案 3 :(得分:0)
假设您有动态ID,如您所示,首先要意识到Selenium的click方法需要locator参数。一种简单的方法是指定一个定位器,该定位器找到以常量“gwt-uid-”前缀开头的ID。您可以使用这些定位器中的任何一个作为click
方法的参数,具体取决于您对技术的偏好:
== XPath == //input[starts-with(@id, 'gwt-uid-')] == CSS == css=input[id^='gwt-uid-'] == DOM == dom=for each (e in document.getElementsByTagName('input')) if (e.id && (e.id.substr(0, 'gwt-uid-'.length) === 'gwt-uid-')) e
脚注1 :我没有使用GWT,所以上面的例子假设它仍然在<input>
元素中放置一个复选框;根据需要调整。
脚注2 :正如亚当暗示的那样,Selenium确实提供正则表达式支持,但在这种情况下它有两个问题:(1)前缀是“regexp:”而不是“正则表达式: ”。 (2)Selenium的click
方法不支持regexp前缀! (我的经验证据表明定位器在Selenium中不使用正则表达式,只有文本匹配参数。)
答案 4 :(得分:0)
您还可以使用Firebug add ons删除GWT UID。
This也可以提供帮助。