我一直在编写使用大量ExtJS的应用程序的测试自动化(在Selenium2 Java,Firefox 3.6中)。我已经能够很好地解决强大的变形元素id,但在一个页面上代码行为让我感到难过。有一个文本字段,可以设置用户名。在单击编辑按钮之前,它不可单击,然后Firebug可以找到文本字段。如果输入文本然后保存,则文本在页面上可见,但它不会出现在HTML代码中的任何位置。即使再次单击编辑按钮以使文本字段可访问,我也无法获取文本字段的值。这是编辑模式中标签和文本字段的代码:
<div class="x-form-item " tabindex="-1">
<label class="x-form-item-label" style="width: 250px;" for="ext-comp-1022">Interface Username:</label>
<div id="x-form-el-ext-comp-1022" class="x-form-element" style="padding-left: 255px;">
<input id="ext-comp-1022" class=" x-form-text x-form-field " type="text" name="interfaceUsername" autocomplete="off" size="20" style="width: 292px;">
</div>
请注意,标签“Username:”会按预期显示在HTML中,但文本字段本身没有任何内容。我怀疑javascript调用正在获取并在文本字段中显示文本,但我对ExtJS并不熟悉。我检查了this post,但它不适用于获取文本,主要是改变ID问题。所以,我想了解如何找出正在调用的脚本,以及如何使用executeScript来获取文本域文本。我可以用Selenium在字段中输入文本,用Selenium保存它,然后通过eyeball在页面上看到它,所以我没有遇到Selenium代码本身定位元素的问题。
谢谢, 塞布丽娜
答案 0 :(得分:1)
我仍然不知道如何确定正在调用的脚本,但在一位乐于助人的同事的建议下,我想出了这个解决方法:
String userid=driver.findElementByName("interfaceUsername").getAttribute("id");
String username=(String)js.executeScript("return Ext.getCmp('"+userid+"').getValue()");
使用元素的名称我得到id(无论那天是什么)然后我调用executeScript来找出文本字段值是什么。它缺乏优雅,但ExtJS并不能促进优雅。
答案 1 :(得分:0)
字段用户名必须有值属性。因此,在firebug中,选择Username字段,在右侧选择DOM选项。必须有一个具有用户名的value属性。尝试类似下面的内容,假设您的WebElement是用户名。
String user = username.getAttribute("value");