Selenium自动化测试用例设计注意事项(一)

发表于:2013-1-25 10:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:kenneth    来源:51Testing软件测试网采编

  这个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是一个共同的话题,在用户论坛上,查找一下之前的讨论,看看别人是如何做的。

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • asyq
    2013-4-15 15:13:36

    留脚印

  • lobster
    2013-1-25 13:55:52

    给那个什么 无广告 非盈利的个人站点做个链接呗 既然都用人家的文章啦 http://www.loggingselenium.com/2013/01/selenium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AE%BE%E8%AE%A1%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9%EF%BC%88%E4%B8%80%EF%BC%89.html

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号