您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
利用Selenium自动化web测试
作者:网络转载 发布时间:[ 2016/6/15 16:19:26 ] 推荐标签:Selenium 功能测试 自动化测试

  如果知道 ID 或名称之外的一个属性,那么直接使用 @attribute=value 定位元素。
  如果只知道属性值的一些特定部分,那么使用 contains(attribute, value) 定位元素。
  如果元素没有指定的属性,那么利用 Firebug 搜索近的具有指定属性的父元素,然后使用 Xpath 从这个元素开始定位想要找到的那个元素。
  表 1. 定位元素的 Xpath 表达式
  定位元素 Xpath 表达式
  n 行的第一列 //table[@id='test_table']//tr[n]/td
  n 行的图像 //table[@id='test_table']//tr[n]//img
  ‘Test 1’ 的编辑链接 //a[contains(@href,test1)]
  表 1 展示了定位元素的 Xpath 表达式。在 Firebug 的帮助下,Xpath 可以定位元素和复制的元素。在元素没有 ID 和名称时,Selenium IDE 将会采用 Xpath。尽管 Xpath 利用已经录的脚本,有助于保持一致性,但是它高度依赖于 web 页面的结构。这使得测试用例可读性差,增加了维护难度。此外,在 Internet Explorer 7 和 Internet Explorer 8 中运行具有多个复杂 Xpath 表达式的测试用例可能会太慢了。在这种情况下,将 Xpath 更换为 DOM,后者是另一种高效的定位策略。
  DOM 是 Document Object Model(文档对象模型)的缩写。Selenium 允许您利用 JavaScript 遍历 HTML DOM。Java 的灵活性允许在 DOM 表达式中有多个语句,用分号隔开,以及在语句中定义函数。
  表 2. 定位元素的 DOM 表达式
  定位元素 DOM 表达式
  n 行的第一列 dom=document.getElementById('test_table').rows[n-1].cells[0]
  n 行的图像 dom=element=document.getElementById('test_table').rows[n-1].cells[1]; element.getElementsByTagName('IMG')[0]
  ‘Test 1’ 的编辑链接 
  dom=function test(){
  var array=document.getElementsByTagName('a');
  var element;for(var i=0; i<array.length; i++)
  {if(array[i].attributes.getNamedItem("href").
  value.indexOf('test2')!=-1){element=array[i];break;}}return element}; test()
  表 2 展示了定位元素的 DOM 表达式。DOM 定位器在 Firefox 和 Internet Explorer 中也有很好的性能。组织 DOM 表达式需要一些 JavaScript 知识。有时,DOM 表达式对于复杂的元素来说太长了,难以看懂(参见表 2 中提到的 Test 1 的编辑链接的表达式)。
  CSS 定位器用于利用 CSS 选择器选择元素。当 HTML 代码具有良好的样式时,可以高效地利用 CSS 定位器。样例表达式展示在表 3 中。
  表 3. 定位元素的 CSS 表达式
  定位元素 CSS 表达式
  n 行的第一列 css=#test_table .test_class:nth-child(n)
  n 行的图像 
  css=#test_table  tr:nth-child(n) > td:nth-child(2) >
  table td:nth-child(1) > div >  img
  ‘Test 1’ 的编辑链接 css=a[href*='test2']
  一般来说,选用熟悉的定位器表达式,并在脚本结构中保持一致。如果有多种表达式可执行,那么使用高效的方式在 web 页面中定位元素。
  如何处理弹出窗口
  一般来说,操作都是在由 Selenium 启动的主窗口中执行。如果您想在一个由 window.open 函数生成的新窗口中执行操作,那么将焦点更换到新窗口。在弹出窗口中执行操作之后,焦点返回到主窗口。处理弹出窗口的过程定义在清单 12 中。
  清单 12. 处理弹出窗口的样例代码
  //wait for the popup window with timeout;
  selenium.waitForPopUp(windowname, timeout);
  //select the pop up window
  selenium.selectWindow(popupWindowIdentifier);
  //perform action on popup window and close the window;
  ....
  //return to the main window use 'null'
  selenium.selectWindow(null);
  windowname 是调用 window.open 函数的第二个参数。上面提到的 popupwindowIdentifier 是一个窗口标识符,可以是窗口 ID、窗口名称、title=the title of the window 或 var=javascript variable。如果弹出窗口的属性未知,但是真的定义了,那么使用 getAllWindowIds()、getAllWindowNames() 或 getAttributeFromAllWindows() 函数来检索弹出窗口的属性。
  在新版的 Selenium RC 1.0.1 中,Selenium 添加了像 selectPopUp(String) 和 deselectPopUp() 这样的方法,它们的功能在以前版本中由 selectWindow(String) 提供。
  清单 13. 处理弹出窗口的弹出函数
  //wait for the popup window with timeout;
  selenium.waitForPopUp(“”, timeout);
  //same as selenium.selectWindow
  selenium.selectPopUp(“”);
  //perform action on popup window and close the window;
  ....
  //same as selenium.selectWindow(null);
  selenium.deselectPopUp();
  清单 13 展示了处理弹出窗口简单的方式。您可以保留 waitForPopUp 和 selectPopUp 函数中的第一个参数为空。如果同时弹出多个窗口,请指定窗口属性。
  如何处理上载/下载文件窗口
  Selenium 使用 JavaScript 来模拟操作。因此,它不支持诸如上载窗口、下载窗口或身份认证窗口之类的浏览器元素。对于非主要窗口,配置浏览器跳过弹出窗口。
  图 7. 安全信息窗口

  展示 Security Information 弹出窗口的屏幕快照,指出页面包含安全的和不安全的条目
  跳过图 7 中安全信息窗口的解决方案是打开 Tools > Internet Options > Custom Level。然后启用 Display mixed content。
  配置 Internet Explorer 跳过非主要窗口会减少或消除运行测试用例时不必要的处理。但是如果配置了 Firefox,那么将它保存为新的配置文件,并利用定制的配置文件启动服务器。在关于测试 HTTPS 网站的一节中提到了这样做的原因。

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