selenium+webdriver用法.docx
Python基础请前往廖雪峰的官网或菜鸟教程学习,这里只做粗略说明 廖雪峰的官网: s: Iiaoxuefeng /wiki/1016959663602400 菜鸟教程: s:/ runoob /python3/python3-tutorial.html 标签的含义 s: runoob /taos/html-reference.htmlSelenium这是一个Python的第三方库,所以需要先粗略的介绍一下PythonPython1、什么是注释解释代码的意思和作用被注释的代码运行时会被忽略2、注释的方法加#号键 Ctrl/'内容'3、转义字符n表示换行t表示字段之间的空格、表不转义字符4、格式化输出I#格式化输出a=18b=19print('小红今年%d,小明今年%(11为(aab)%d表示数字,s表示字符串5、python的数据类型numbeLl、int 2、floatstrf字符串字典列表"元组()6、python是什么编程语言面向对象的编程语言:类、方法、类的实例化、类的继承7、变量作用:存储数据、使用数据分类:全局、局部8、变量的命名规那么以字母或下划线为开头以字母或下划线、数字组成不能使用官方定义的关键字9、命名方法大驼峰(两个单词首字母都大写)以上内容不够完整,如后续遇到新的问题解决之后会加以补充。FirstName=l小驼峰(第一个单词首字母小写,第二个大写)localName=210、逻辑判断单层判断if.else(if成功else不执行,if不成功else执行)多层判断if.elif.elif.else.11、函数内置函数:print打印int有数字需添加len获取长度xlrd引进第三方的工具自定义函数:def函数名(参数):(函数体)def . Md(nb);c=(a+b)12、四种传参方式有参无返FirstName=l localName=2 一】Cwt 月 dd (%。)工 c=(a+b) print(c) add(FirstName.localName)有参有返FirstName=llocalName=2AA d add(a,b): 三(a+b) ) return cprint(result)无参有返if _name_ = '_main_':def add():firstfint(inpirt (,输入第一个数字)second=int(input(,输入第二个数字,)k=first+second即真nt(k)return kresult=add()print(result)无参无返if _name_ = '_main_':def add():first=int(inpirt (,输入第一个数字,)secondNint(input(,输入第二个数字,)k=first+secondprint(k)add()13> main函数(main加回车键)if name = '_main_':(程序入口) first=int(input('请输入第一个数字:') nFinput ('请输入任意字符:)second=int (input ('请输入第二个数字:')if m= + :print C执行加法运算') add (first, second)elif-':print C执行减法运算')elif m=,/":print C执行除法运算')else:print ('输入错误,请重新输入!)FirstName=l 一localName=2def add(a.b): cga+b) print(c)#print(result)namenamemainfrist=int(input( 1 请输入笫,个数字:,) m=input( ,请输入任意字符:) second=int(input(,请输入第:个数'工:1) if m=,+,:print。执行加法运算,)add(fristsecond)elif m=1 - 1:print (,执行减法运算,)elif m=,/':print。执行除法运算,)else:|print请重新输入,)14、类(class):对象的集合,对象是类的实例 class 类名():方法1方法215、类内方法的调用(self)class arithmetic: def add(self): print ('力口法)def syb(self):print("减法")def blend(self): self.add() self.sub()16、类外方法的调用加lass arithmetic: def add(self):,print加法)!def sub(self):,print减法')3# def blend(self):#self.add()-j # self .sub()arithmetic.add()17、类的继承class 类名 1():方法1方法2class类名(类名1):方法1方法2iclass testQ: j def add(self): iprint。加法,)def sub(self):1print("减法,)iclass testl(test): def mul(self): )print。乘法)testlO .add()18、排序字典 diet列表list方法1:升序(),降序()Iist0 = 3, 5, 7, 65, 9, 88, k = len(listQ) for i in range k):for p in ranged + 1, k):if List0i > list0p:list0ir list0p = list0pz list0i print(list0)方法2:升序(False),默认是升序sort原列表进行排序(不产生新对象)sorted新列表进行排序(产生新对象)生上归3221.62与5263Mlist0.sort()| print(listO)Iist0?3%4/21J2 % 5063- list0.sort(reverse=False) print(list0)降序(True)list0=32165630 listO. sort( "everse=True|) print(listO)方法3:升序“st 以 3%4/21之6/力 5幺6300 listl=sorted(list0) print(listl)元组()tuple19、列表字符串的切片(取值范围)正号是从前往后数,负号表示从后往前数listl = 1, 5, 2, 9, 'a', 81, 'h' print(listl3:-l)Selenium+webdriver 的用法安装详情请看UI自动化安装流程1 .常用操作常用操作有翻开网页(get(url),点击(.click。),文本框输入(send_keys(),清空输入内容 (.clear。),切换标签页(switch _to),关闭标签页(.close。),退出(.quit。),窗口最大化 (.maxisize_window()等。2 .元素定位想操作页面上的元素,首先要能找到这些元素,工具或代码无法像我们测试人员一样用 肉眼来分辨页面上的元素。那么我们就需要我们帮助它们定位到这些元素。元素定位有id, name, class, link, partialjink, Xpath, css, tag 八种方法。拿百度官网举例,翻开百度官网,点击右键再点击检查或按F12Dwlboif ii now .wiab. cDwlboif ii now .wiab. cOont thv* eQ«4n点击小箭头图标点击我们想操作的元素就可以在处看到我们想要的元素XAOut is 3 *- nd class s.lpt value M*lecftn«25S, 珏"k n«w < Kt l>ut type Mieer n«Be- in»ut Lv»ut t,pe- nlscer' na«e- ,“t typt-"hlw«r- raw- Ct type- nicoen* na«e- Wvt typf-hltdtr' inovt type- .Mr'le' value-山7rS7.W v«Iue-'l- : e- v»loe> ” value >> < hM-iowtv* 3 cImj- t< Llpjr mcv-M Q»lc«4tXete-wrtpemnm >oxa1人代会斫取两濡工作梭告O4人民日报:今天不做M女神女王.蚱日新N本土7渊无症软33 8 5乌克兰国各女演员战场阵亡。从政阳工作报令钳杼有例经化O 6 A股大帙1«vlck4e:ete c(68<r,T tille" 二<1 cUss*W /icUm 33-1Q ),:? d-: nc*;</“N k/M* 1|MALX, - / “* ClMftOOB'Mm bc<r> "ZhtKJ$*yiH Co«fveH Uyout EwM Intvnen DOM Br««kpof Prortwt Aecmi»M>:i -dt .回P«M”&0U8; ,* it": 1 孙 wirv-htsf*:"8,):4b<.M;3" 00mtContok ,2 $ New «New prrww fMurr A<c«wbiiey v*wt<M an ovm» & g whoW a9« xFgiry tr”imptaed PrcptniM p»neNov Ser leit boi. Nde null r>d 皿+P pvop«rt>es by (MuK and m option to ww prcpectiti从上面定位到的搜索框属性中,有个id二kw的属性,我们可以通过这个id定位到这 个搜索框,同样还有name二wd、class=s_ipt的属性,同样我们也可以通过name和class 定位到这个搜索框,代码如下(我展示所使用的浏览器为Chrome):from selenium import webdriver# 启动浏览器driver = webdriver.ChromeO# 翻开百度首页driver.qet(1 s:/www,baidu ,)# 通过id定位搜索框,并输入郑州driver . fNA_ele用eAt_by_:iaC kw') .sendkeys('郑州')# 通过class定位搜索框,并输入郑州driver . fiRLe1egieAt:_by_la££_Aaffi(1 s.ipt1). send.keys(1 郑州')# 通过name定位搜索框,并输入郑州driver . f 2Ad_eleffieAt_by_ASHBe(' wcT). send.keys('郑州')# 退出driver.quit()像首页左上角新闻","haol23", “地图”等超文本链接,我们就可以用link定位, 有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这 时候我们就可以只截取一局部字符串,用partialink模糊匹配。SA-T:cp(P 习 tnht a«tn n« » + e,小 国手 <foocn*e nt«» <|.-5TATV5 8 (i»B竹g.» «My c-oocr-2*T3«cert5st>le> ifi-firj-total-p*<e- role«*pas«4esr:ptior* *19-labelA T« 你 故比d B? RPfi * *WB«xtrfblti«ctif©41t»i纨*- t>eiwx-f hrw«*1>tmccxociyoifl<erx/a> .<»c*i©t>.</«Ut>iteAtaret lfi*_li.result.css,none ;">-</text are*- «1 - 一.” gy:”Fhr:*,fK、./,REr»»<4iv <$ ,”17, v <«iv ia»*he«d* cl4tt>awxii 巴 丽有生之年!傲信8020板本终于来了,比现在好用10像awxii 巴 丽有生之年!傲信8020板本终于来了,比现在好用10像SfP2V >O»-»1人代a听取两高工作is告o2昨日斩憎本土破17冽无匠状3从政府工旧8告谣构5尊生 ;. :_., 9. 一.,:: :一 - e. , 1 ; - ' - - ?;- '%,Inout t>pe svMdt ,。“ “MeT <Uw t>Cemnm >oxa1人代会斫取两濡工作梭告O4人民日报:今天不做M女神女王.蚱日新N本土7渊无症软33 8 5乌克兰国各女演员战场阵亡。从政阳工作报令钳杼有例经化O 6 A股大帙 «P»R ClMt-'t' inovt typT''h Pvut type h ipvt t>pe- 'h iA»ut type hZ2«“Copy e*en»e<itid* x HTMLXe «W«n«ntCutCW2s»»ubQs.btRCopy o»Ze<HTMLAecwwteM)-jbeltCopyCopy JSpMhCopy| Copy X%1Copy M XPgCapture Aode scre*mhota<»£y; 力&x<rw: color:Md«r-r»d&u«: » XO0x XOp>m“:color: X”;B*U*«d0M: none;rom-waifM: 4m;W31r: » ROM;3H*” «;Consok $ mScvo* aMoviewE3 HoU60n ModeNew pr«v<w iMurr A4cewbikey WwM an ovrv«» c# the whole a9* xc«Qbiity tr”I26«d 防Ne <»er Wit bo«. Nde noil Nd vndgp properties by dtf<tuK and g opeton to wew prcpenieiUwe r gtubal 2心"上力 g E tfw Chromt%from selenium import webdriver#启动浏览器driver = webdriver.Chrome()#翻开百度首页driver.get( cU>5 *c-Uo« qvlcktfeletc c-celor-cr«j2 title 左 Z /Idriver.get( cU>5 *c-Uo« qvlcktfeletc c-celor-cr«j2 title 左 Z /I ck” 6k, /i qc W“it/leno«e; IttfiMtfT “"6, SPG ClMf *H LZjL_ Add*ttnbute s:/www . baidu . com') # 通过link定位新闻并点击driver . fiAd_eleffieAt_by_liAk_text('新闻').clickO# 通过partiaLlink定位haol23并点击driver.f4Ad_eleffieAt_by_patj.al_l:LAk_te)(t(1 hao*) .clickO# 退出driver.quit()前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面 中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通 过这个唯一的属性值来定位他们。但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属 性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个 时候我们就只能通过xpath或者CSS来定位了。(CSS定位学习起来比拟难理解,这里不做过 多讲解,有兴趣可以了解一下)Dwlboif ii now .wiab. cOont thv* eQ«4nG (£) E«*nere* Co»uole Souetci N*o*t c1m> t<Mw*9«d a£cg】et"”seen cUm 4Z3c y,w*iNd' cl«tt t.lpt «»:ue2SSBfrom selenium import webdriver# 启动浏览器driver = webdriver.Chrome()# 翻开百度首页driver .ciet(1 s:/ baidu ,)# 通过id定位搜索框,并输入郑州driver f用ent_by_,d( 1kw1) .send_keys(1 郑州')# 通过Xpath定位到百度一下按钮,并且点击driver用(,/=“su"') .clickO #退出driver.quit()tag定位基本上在工作中用不到,HTML是通过tag来定义功能的,比方input是输入,table 是表格,等等。每个元素其实就是一个tag, 一个tag往往用来定义一类功能,我们查看百 度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。 这种定位方法,仅做了解即可PS:我所说的元素定位方法仅适用于定位元素的值唯一的情况下,注意find_element不要写 成find_elements,find_elements适用于定位的元素的值不是唯一的情况下可以选择的一种方 法,有兴趣可以了解一下,但是还是推荐使用Xpath定位。3、切换标签页:在编写自动化测试的过程中,会有翻开新标签页的情况,这时候再去定位元素会发现, 代码的元素定位还是在原有标签页,这是我们的代码会报错找不到元素。所以我们需要先进 行标签页的切换,再去定位新翻开标签页的元素。切换标签我们就需要获取标签页列表.window_handles,以及切换标签页 switch_to.window,代码如下:from selenium import webdriver#启动浏览器driver = webdriver.Chrome()#翻开百度首页driver . aet(' s:/www,baidu,com') driver.舟(1 hao1) .clickO切换标筌页driver.switch.to.window(driver.window.handles1)关闭当前标签页driver.close()|退出driver.quit()