Splinter是以Selenium, PhantomJSzope.testbrowser为基础构建的web自动化测试工具,基本原理同selenium

支持的浏览器包括:Chrome, Firefox(默认)

模拟百度搜索Splinter

from splinter import Browser

两种初始化Browser的方法,区别在于method2中离开with块区域后,browser自动关闭,而method1中若要关闭browser需主动调用quit()方法。 browser = Browser() # method1
with Browser() as b: # method2
# stuff ...

通过Browser类,可实现模拟浏览器的大部分操作:
Step1: 打开百度首页
  browser.visit("http://www.baidu.com")  # visit(url)用于打开指定URL的网页

Step2: 文本框输入搜索内容,如Splinter
  browser.find_by_id("kw").first.fill("splinter")    # fill()方法用于填充文本框内容
  # browser支持多种查找方案,同selenium,如id,name,css,xpath
  
browser.find_by_id("su").click() # click()方法用于点击动作
注: Splinter中的find_by_*()方法,返回的均是列表类型ElementList,利用.first 或.last可分别获取第一个和最后一个元素,也可通过索引方式获取,默认情况下返回第一个元素(即
    browser.find_by_id("kw").first  <==>
    browser.find_by_id("kw")    <==>
    browser.find_by_id("kw")[0]
   )。

Step3: 判断当前网页中是否有Splinter,利用is_text_present(text,wait_time)方法查看当前页面是否包含指定text
  if browser.is_text_present("Splinter 0.7.3 documentation", 10):
  current_win = browser.windows.current # 获取当前窗口句柄

Step4: 打开Splinter官方文档页,查找到对应元素并点击
  browser.find_by_id("1").first.find_by_xpath("h3//a")[0].click()
  
Step5: 切换窗口。点击后会产生新的窗口,browser.windows包含了当前所有窗口句柄,可通过判断来确认新的窗口
  if len(browser.windows) > 1 :
  for win in browser.windows:
  if win is current_win:
  continue
  else:
  print "current window title2: %s"% win.title
  win.prev # 回到前一个窗口,即current_win

注: 窗口切换相关
browser.windows              # 获取所有窗口对象句柄
browser.windows[0]           # 获取第一个窗口句柄
browser.windows[window_name] # 获取指定名称的窗口句柄
browser.windows.current      # 获取当前活动窗口
browser.windows.current = browser.windows[3]  # 指定第四个窗口为当前活动窗口

window = browser.windows[0]
window.is_current            # boolean - 判断window对象是否为当前窗口
window.is_current = True     # 设定window为当前窗口
window.next                  # 跳转到window的下一个窗口
window.prev                  # 回到window的上一个窗口
window.close()               # 关闭 window
window.close_others()        # 关闭window之外的所有窗口

  

 

posted on 2016-01-29 21:50  pattywgm  阅读(1424)  评论(0编辑  收藏  举报