无法找到具有动态ID的text_field

时间:2012-03-30 04:33:08

标签: watir watir-webdriver

<div id="temp_1333021214801"> 
    <input type="text"/> 
</div>

$browser.text_field(:xpath,".//*[@id='temp_1333018770709']/input").set("apple")

我收到错误“无法找到元素”,因为ID会动态更改。

请帮我在文本字段中设置文字。

2 个答案:

答案 0 :(得分:0)

如果您有动态ID,我可以建议以下内容:

  1. 代码对象计数。例如

    $browser.text_field(:index => 2)

    在页面上给出第三个text_field。

  2. 代码,了解您正在尝试查找的内容。

    $browser.div(:name => 'mydiv').text_field(:index=>2)

    给出div中的第三个文本字段,名为&#39; mydiv&#39;。

  3. 无论其

    如果您的前端以这种方式不可测试,我强烈建议您首先考虑您对自动化测试的承诺。对软件进行任何微小的改动都会让你工作到晚上9点,当你更新所有的脚本时,拔掉你的头发并来回摇摆,所以除非代码维护是你的周末爱好,否则考虑半自动化或探索性测试或手动脚本。谈谈开发(可能是谁。可能是你!)或者更高层(除非你也是),看看它是否可以变得更加可测试。也不要使用xpath,除非你对它有一些不正常的乐趣。

    希望这很有帮助,如果没有源HTML,我就无法做任何具体事情。

答案 1 :(得分:0)

似乎你的动态id是temp_所以这应该根据上面的信息来做:

browser.div(:id, /temp_\d+/).text_field.set 'something'

我的解决方案的问题是它假设id将始终是temp_ regex连续匹配任何数字集,这似乎是上面的示例的情况。此外,它假设该页面的DOM中没有其他div(:id,/ temp_ \ d + /)组合,很可能不应该是一个问题。