您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
Selenium自动化测试用例设计注意事项
作者:网络转载 发布时间:[ 2013/1/25 14:02:31 ] 推荐标签:

  这个HTML锚标记定义了一个ID属性为“adminHomeForm”按钮。和大部分HTML标签相比,这是一个相当复杂的锚标记,但它仍然是一个静态标签。每次页面被浏览器加载时,HTML将保持不变。它的ID在所有的页面实例里保持不变,也是说,页面被展示时,这个UI元素总是有同样的标识符。所以,点击此按钮的测试脚本(Selenium Server)如下所示:

selenium.click("adminHomeForm");

  然而,你的应用程序,可能生成动态的HTML标识符。在不同的网页实例中,标识符发生改变。例如,一个动态的页面的HTML元素可能会是这个样子:

<input id="addForm:_ID74:_ID75:0:_ID79:0:checkBox" type="checkbox" name="addForm:_ID74:_ID75:0:_ID79:0:checkBox" value="true" />

  这是一个复选框,id和name属性都是addForm:_ID74:_ID75:0:_ID79:0:checkBox。在这种情况下,使用标准的定位,测试脚本应该是这样子的:

selenium.click("addForm:_ID74:_ID75:0:_ID79:0:checkBox");

  对于动态生成的标识符,这种做法行不通。下一次页面加载时,标识符将是一个不同的值,执行上述脚本会遇到“element not found”错误。

  要更正该问题,一个简单的解决办法是使用XPath定位替代ID定位器。因此,对于该复选框,可以简单地使用

selenium.click("//input");

  或者,如果它不是在页面上的第一个文本输入域,尝试一个更详细的XPath语句。

selenium.click("//input[3]");

  或

selenium.click("//div/p[2]/input[3]");

  但是,如果你确实需要使用ID来定位元素,可以换一种不同的解决方案。您可以先捕捉到网站的这个ID,然后再使用它,例如:

String[] checkboxids  = selenium.getAllFields(); // Collect all input IDs on page.
             for(String checkboxid:checkboxids) {
                    if(checkboxid.contains("addForm")) {
                selenium.click(expectedText);
            }
             }

  如果页面上只有一个复选框的ID文本为“expectedText”时,这种方法工作。

  ● 定位Ajax元素

  定位、验证AJAX元素的好的方式是使用Selenium 2.0 webdriver的API,它专门解决Selenium 1.0测试AJAX元素的一些限制。

  在Selenim 2.0中,可以使用waitfor()方法来等待一个页面元素变得可用。该参数是一个WebDriver用来实现定位的By对象。这是WebDriver的章节中详细解释。

  在Selenium 1.0(Selenium-RC的)中,要做到这一点需要编写更多的编码,但它并不难。首先检查元素,如果它存在,等待预定义的时间段,然后再重新检查。这在循环内执行,如果超过一个预定的超时,元素不存在则终止循环。

  让我们考虑页面上实现AJAX效果的一个链接(链接= ajaxLink),可以使用循环处理:

// Loop initialization.
for (int second = 0;; second++) {
 
     // If loop is reached 60 seconds then break the loop.
     if (second &gt;= 60) break;
 
     // Search for element "link=ajaxLink" and if available then break loop.
     try { if (selenium.isElementPresent("link=ajaxLink")) break; } catch (Exception e) {}
 
     // Pause for 1 second.
     Thread.sleep(1000);
 
}

  这当然不是的解决办法。Ajax是一个共同的话题,在用户论坛上,查找一下之前的讨论,看看别人是如何做的。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd