最近一直在做关于EasyUI的自动化测试,以下是一些总结,包含几个常用函数,还有一些小技巧
1、读取一张表中的某个数据的函数
def res(self,row,column):
driver = self.driver
if row == 1:
xpath = "/html/body/form/table[2]/tbody/tr["+str(row)+"]/th["+str(column)+"]"
else:
xpath = "/html/body/form/table[2]/tbody/tr["+str(row)+"]/td["+str(column)+"]"
content = driver.find_element_by_xpath(xpath)
print "%s/%s || %s" %(row,column,content.text)
|
例如:一张表,在结果中每页显示20条数据,超过即有一下页数标识,可以先查找是否存在多页,判断该页的表格的行数,然后读取其中某一列的数据(列数起始为1)
import string
if string.atoi(driver.find_element_by_id("PageControl1_lbPageCount").text,10)==1:
num=string.atoi(driver.find_element_by_id("PageControl1_LblRight").text[2:-2],10)
else:num=20
print num
for row in range(1,num,1):
self.res(row,10)#读取第十列的值
|
2、截屏函数
(1)windows截屏
import win32gui, win32ui, win32con, win32api
def window_capture(self):
hwnd = 0
hwnddc = win32gui.GetWindowDC(hwnd)
mfcdc=win32ui.CreateDCFromHandle(hwnddc)
savedc=mfcdc.CreateCompatibleDC()
savebitmap = win32ui.CreateBitmap()
moniterdev=win32api.EnumDisplayMonitors(None,None)
w = moniterdev[0][2][2]
h = moniterdev[0][2][3]
savebitmap.CreateCompatibleBitmap(mfcdc, w, h)
savedc.SelectObject(savebitmap)
savedc.BitBlt((0,0),(w, h) , mfcdc, (0,0), win32con.SRCCOPY)
T=time.strftime("%d%H%M%S",time.localtime(time.time()))
bmpname=win32api.GetTempFileName(".","")[0]+T+'.bmp'
savebitmap.SaveBitmapFile(savedc, bmpname)
#return bmpname
print bmpname
|
def screenshoot(self,name='error',testpath='D:\\SeleniumScreenshoot'):
if os.path.exists(testpath)==False:
#print '不存在'
os.makedirs(testpath+'\\')
T=time.strftime("%H%M%S",time.localtime(time.time()))
filename=testpath+'\\'+name+T+'.png'
self.driver.get_screenshot_as_file(filename)
|
def Login(self,name,pwd):
try:
driver=self.driver
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("zhangsan")
driver.find_element_by_id("pwd").clear()
driver.find_element_by_id("pwd").send_keys("123456")
driver.find_element_by_id("submit_login").click()
time.sleep(10)
#driver.implicitly_wait(100)
driver.find_element_by_id("ext-gen19").click()
driver.implicitly_wait(60)
except Exception,e:
self.screenshoot('LoginError')
return 0
return 1
|
3、js函数
(1)浏览器滚动条控制函数
def Bar (self, height):
browser = self.driver
try:
setscroll = "var q=document.documentElement.scrollTop=" + str(height)
browser.execute_script(setscroll)
except Exception,e:
self.screenshoot('Scroll Bar Error')
return 0
return 1
|
height为滚动条高度控制
(2)可以通过JavaScript来获取一个type=hidden的元素
js="document.getElementById(\"warning\").type ='text';"
browser.execute_script(js)
|
4、无明显标志的frame的定位方式
def Frame(self,xpath):
driver=self.driver
A=driver.find_element_by_xpath(xpath) #"/html/body/div/div[2]/div/div[2]/div/div/iframe"
driver.switch_to.frame(A)
|
5、日期控件的操作
日期控件有很多种操作方式,如果在写代码前就发现是可以直接写入的当然最好,但是有时候自动写入了点击确定却不能生效,这个时候可以试一下,填完不点确定,而是直接点击其他输入窗口进行下一项输入,或者直接点击搜索。在我这段时间的测试中,都可以用这样的方式输入日期
6、下拉菜单
from selenium.webdriver.support import select
select.Select(browser.find_element_by_tag_name("select")).select_by_value("1")
|
还可以使用xpath来进行定位
driver.find_element_by_xpath("//option[value='1']").click()
7、保存本地网页
把自己写的html网页放在当前路径下。在一些业务流程的自动化测试中,每次定位某个元素都要重新跑一遍流程,十分浪费时间,可以将整个网页下载,然后单独在这个网页上定位,成功后再复制代码。
filepath = 'file:///'+os.path.abspath('xiala.html')
browser.get(filepath)
|
8、获取tag的某个属性值:
imput.get_attribute('type') 获取input标签的type属性的值
例:if input.get_attribute("type")=='checkbox':
input.click()
有时定位的时候通过属性值过滤
driver.find_elements_by_css_selector("input[type=checkbox]")
9、非常强大的find_element_by_css_selector()
该<a>元素存在class="ct"属性,可以直接写find_element_by_css_selecor("a.ct")
该<a>元素存在id="ct"号,可以直接写find_element_by_css_selecor("a#ct")
其他属性,可以在tag名后加[属性名=属性],如find_element_by_css_selecor("a[title="ct"]")
10、切换浏览器窗口
def switch(self,close=1):
"""close=0,保留之前的窗口,close=1,关闭之前的窗口,默认关闭"""
driver = self.driver
before = driver.current_window_handle
all_handles = driver.window_handles
for handle in all_handles:
if handle != before:
if close==1:
driver.close()
driver.switch_to.window(handle)
|