【问题标题】:GWT id element is changing every time in seleniumGWT id 元素在 selenium 中每次都在变化
【发布时间】:2011-03-26 20:16:51
【问题描述】:
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

【问题讨论】:

    标签: java gwt selenium


    【解决方案1】:

    许多 GWT 元素都带有 ensureDebugId(UIObject 上的方法),允许您显式地将 Id 设置为元素以进行测试和调试。你还需要继承模块

     <inherits name="com.google.gwt.user.Debug"/> 
    

    让它工作。这样做的好处是,您可以通过在 prod 模式编译期间删除继承的模块来从生产部署中删除跟踪。因此不会有代码更改来删除不必要的 Id。

    【讨论】:

      【解决方案2】:

      你可以用 3/4 种方式来做 可以检查这个链接: 3 ways of dealing with GWT dynamic element Ids 其中讨论了将静态 id 分配给 GWT 元素的 3 种不同方式。

      另外, 您可以编写一个自定义的 javascript 方法,该方法将动态获取所有 id。然后,您可以处理这些 id 以进行 selenium 操作。

      【讨论】:

        【解决方案3】:

        有两种可能的解决方案。首先是通过说 regex:gwt-uid-[0-9] 告诉 Se 你正在使用正则表达式。正如您所拥有的那样,它正在查找名称或 id 是该文字字符串的 and 元素。

        另一种解决方案是为我在 http://element34.ca/blog/google-web-toolkit-and-id 中讨论的内容打开静态 ID。

        -亚当

        【讨论】:

          【解决方案4】:

          假设您有动态 ID,正如您所介绍的,首先要意识到 Selenium 的 click 方法采用 locator 参数。一种简单的方法是指定一个定位器,该定位器可以找到以您的常量“gwt-uid-”前缀开头的 ID。您可以使用这些定位器中的任何一个作为 click 方法的参数,具体取决于您对技术的偏好:

          == XPath == //输入[starts-with(@id, 'gwt-uid-')] == CSS == css=输入[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,所以我上面的示例假设它仍然在 &lt;input&gt; 元素中放置了一个复选框;根据需要进行调整。

          脚注 2:Selenium 确实提供正则表达式支持,正如 Adam 所暗示的那样,但在这种情况下存在两个问题:(1) 前缀是“regexp:”而不是“regex: ”。 (2) Selenium 的click 方法 根本不支持正则表达式前缀! (我的经验证据表明,定位器在 Selenium 中不使用正则表达式,只有文本匹配参数才使用。)

          【讨论】:

          • 如果所有动态 id 都以 'gwt-uid-' 开头,你将如何解决?大多数 id 是 gwt-uid-withsomenumber,这在会话中是不同的。
          • 我的所有 3 个示例都解决了这个问题,所以我不确定您还问什么。 (虽然从技术上讲,我不需要在前缀后面加上数字,但不太可能从中得到误报匹配。)
          【解决方案5】:

          您还可以使用 Firebug 插件来删除 GWT UID。

          • 右键单击 GWT UID 所在的位置,然后选择“inspect element with 萤火虫”-
          • 点击GWT UID所在的代码和firebug窗口的时间 出现选择“deleted attributes id”
          • 去掉id后,再右击一次,复制“Xpath”
          • 添加额外的 (/) 并将 xpath 粘贴到目标上。

          This 也可能有帮助。

          【讨论】:

            猜你喜欢
            • 2017-12-11
            • 2018-04-01
            • 2016-05-24
            • 2016-01-17
            • 1970-01-01
            • 1970-01-01
            • 2014-05-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多