Window操作系统下python selenium常用代码和雷区
一、常用代码
# coding = utf-8 #使用utf-8编码,也可以把utf-8改成“GBK”中文编码
一、常规操作
from selenium import webdriver #加载空间库
driver = webdriver.Chrome() #选择自动化的浏览器
driver.get("url") #操作地址
driver.maximize_window() #浏览器窗口最大化
driver.quit() #测试结束,关闭浏览器
driver.set_window_size(w, h) #设置浏览器窗口宽w,高h
driver.back() #网页回退按钮
driver.forward() #网页翻页按钮
二、定位方法
#注:定位通常是找到唯一标识符,可以Ctrl+F进行查找相应的string看是否唯一,若唯一,定位则可直接使用
find_element_by_id("id") #通过ID定位
find_element_by_name("name") #通过name定位
find_element_by_class_name("class name") #通过class name定位,注意管理者工具中的class空格隔开的是不同的classname并不是一个classname中间有空格符
find_element_by_tag_name("tag name") #通过tag name定位
find_element_by_link_text("文本汉字") #通过链接文本定位
find_element_by_partial_link_text("文本") #类似于上一条,但可以部分查找,不用输全
find_element_by_xpath("相对路径") #可以用开发者工具,定位点到相应的代码行后,鼠标右键,copy->Xpath。注:在谷歌中,Xpath中会有"",而在python的语法中,在这一句find代码中会出现4个"",无法识别到底哪里终止,所以,复制得到的Xpath需要将其中的""改为'',当然这也是最好用的一种定位方式(效率也低)
find_element_by_css_selector() #选择器,暂不清楚
find.clear() #查找某个元素后,清除元素对应输入框内的数据
find.send_keys("admin") #查找到某个元素后,在该元素对应的输入框中输入admin
find.click() #点一下某个查找到的元素
find.submit() #提交表单,类似于上面的click
三、获取某些元素的信息
find.size #输出某个元素的尺寸
find.text #获取某个元素的文本
find.get_attribute('type') #返回元素的属性值,此例用的是type类型的值
find.is_displayed() #检查某个元素是否用户可见
四、鼠标事件
#注:para是指定位得到的某个元素,可以理解或者写成para=find.,然后传递的就是para
context_click(para) #右击
double_click(para) #双击
drag_and_drag(para1,para2) #拖动,在para1按下鼠标左键,然后移动到para2上释放鼠标
move_to_element(para) #鼠标悬停在某一个元素上
click_and_hold(para) #按下鼠标左键在某一个元素上
ActionChains(Usr).context_click(para).perform() #Usr为操作的对象,para为定位的元素,所有要执行的动作都在ActionChains中,最后.perform()执行在ActionChains中存储的动作行为
五、键盘操作
find.send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
find.send_keys(Keys.SPACE) #空格键(Space)
find.send_keys(Keys.TAB) #制表键
find.send_keys(Keys.ESCAPE) #ESC
find.send_keys(Keys.ENTER) #回车(Enter)
find.send_keys(Keys.CONTROL,'a') #全选(ctrl+A)
find.send_keys(Keys.CONTROL,'c') #复制(ctrl+C)
find.send_keys(Keys.CONTROL,'x') #剪切(ctrl+X)
find.send_keys(Keys.CONTROL,'V') #粘贴(ctrl+V)
driver.title #显示当前浏览器的页面标题
driver.current_url #获取当前页面的url
六、窗口切换
switch_to_window() #切换句柄
current_window_handle #显示当前句柄
window_handles #列出所有句柄
注:可以通过browser.switch_to_window(browser.window_handles[*])来控制切换到哪个窗口
七、等待时间
driver.implicitly_wait(time) #等待时间,应用于所有的操作动作(执行完成则立刻显示,如果还没执行完成,就time秒中止)
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait方法略复杂,自己查
time.sleep(time) #休眠暂停time秒
七、处理Alert弹窗对象
switch_to_alert() #切到一个alert对象
alert.text #显示alert警示框的文本信息
alert.accept() #确认
alert.dismiss() #取消
二、自动化测试模型
1.数据与代码隔离,灵活易复用
2.逻辑抽象出来形成模型,便于分析和构建测试脚本
三、python selenium自动化定位雷区
1.find_element_by_class_name()方法
描述:class标签中的class_name中的空格,并不是代表一个classname中有空格,在classname中,空格代表的是隔开不同的属性值。如下图
该处定位其实只需要driver.find_element_by_class_name("tang-pass-footerBarULogin"),查找第一个classname即可。一般而言,习惯直接点击复制的,会把多个属性值复制过去,直接粘贴定位自然会出错。
解决方法:肉眼识别,找到一个全局唯一的classname然后复制进行查找定位即可。
2.find_element_by_xpath()方法
描述:使用Chrome浏览器直接查找Xpath的时候,带出来的路径中是有"",这种双引号的,然而,在xpath中引用参数时,xpath("参数"),这会导致无法识别双引号的匹配情况。
解决方法:1.把Chrome中复制得到的xpath中的双引号换成单引号即可。
2.在Chrome中复制得到的两个双引号前+"\",告诉python:我这里是一个参数中的双引号,不是参数结束输入标志即可。
3.定位元素忽略了元素的可见性(label标签在作祟)
描述:学了python selenium自动化以后,想上手实践一下自己能不能自动化登录自己的邮箱,于是找到了公司的邮箱进行自动化登录。结果却触雷了。
以为自己定位到了这些classname或者id就可以定位这个元素了,其实不然。Shell报错是:'NoneType' object has no attribute 'send_keys'该属性不能键入值。
主要是因为用户名和密码这两个元素前,使用了label标签,只有选中了这个元素,让label标签值变为actived才可用键入用户名或者密码。没有click的时候元素是不可见的。
解决方法:定位到了元素以后,加一个click选中让label标签可见即可。