一、python环境搭建

1)下载安装Python(环境变量的配置)
2)安装pip(现在Python自带,使用命令安装即可)
3)安装selenium(命令:pip install -U selenium)
4)安装浏览器webdriver(selenium自带火狐,要下载谷歌和IE)
操作:下载的chromedriver.exe或IE.exe,把它们放到浏览器安装目录下的Application文件里,再配置其环境变量中

二、python自动化的实现

1)打开浏览器、URL

from selenium import webdriver
driver=webdriver.Firefox()
help(b.get)
b.get('http://www.baidu.com')
b.title
'百度' in b.title
b.current_url
'baidu' in b.title

2)元素地位

①find_element_by_id()
ele=b.find_element_by_id('kw')
id(ele)
type(ele)
ele.clear()
ele.send_keys('麦子学院')
b.back() ②find_element_by_name()
ele=b.find_element_by_name('wd')
ele.send_keys('麦子学院')③find_element-by_class_name()
ele=b.find_element-by_class_name('s_ipt')
ele.send_keys('selenium')
ele.size
ele.id④find_element_by_tag_name()
ele1=b.find_element_by_tag_name('input')
ele1.size
ele1.id⑤find_element_by_link_text()
from selenium import webdriver
b=webdriver.Firefox()
b.get('http//maiziedu.com/')
b.maximize_window()
ele=b.find_element_by_link_text('企业直通班')
b.click
b.back⑥find_element_by_partial_link_text()
ele1=find_element_by_partial_link_text('直通班')
ele.id
ele1.id
查两个元素的id是否一样,如果在同时进入一个页面,id相同,如果不是同时,则不一样⑦find_element_by_css_selector()
使用firebug在浏览器中复制css路径
ele_css=b.find_element_by_css_selector(粘贴css路径)
或ele_css=b.find_element_by_css_selector('input[id=\'search\']') #查其中的元素进行定位
b.click
b.back
⑧find_element_by_xpath()
/xxx   选取节点xxx(绝对路径)
ele1=b.find_element_by_xpath('/html/body/from/input')
//xxx  整个文档找所以xxx元素
//xxx/yyy[指定那个数]  #因为有个名字相同的元素
ele2=b.find_element_by_xpath('/html/body/from/input[2]')
//xxx[@id]或者//xxx[@id=yyy]  找到类不同的元素地位或元素值不同来定位
ele3=b.find_element_by_xpath('//html/body/from/input[@id]')

三、python导入模块实现

1)鼠标事件

ActionChains(driver):用于生成模拟用户行为
perform:执行存储行为
①context_click        右击事件
②double_click         左击事件
③drag_and_drop         拖动
④move_to_element()    鼠标停在一个元素上
⑤click_and_hold       按下鼠标左键在一个元素上
from selenium.webdriver.common.action_chains import ActionChains
ele=driver.find_element_by_link_text('企业直通班')
ActionChains(driver).move_to_element(ele).perform() #move_to_element(为鼠标的行为)
sub_ele=driver.find_element_by_link_text('软件测试')
sub_ele.click()

2)键盘事件

from selenium.webdriver.common.keys import Keys
send_keys(Kyes.BACK_SPACE)     退格件
send_keys(Kyes.CONTRL,'a')     全选
send_keys(Kyes.CONTRL,'v')     粘贴
send_keys(Kyes.CONTRL,'c')     复制
send_keys(Kyes.CONTRL,'x')     剪切
send_keys(Kyes.ENTER)          回车

3)等待时间

①from time
time.sleep(2)  #页面等待时间
②driver.implicitly_waite(2)#查找,查找到立刻执行下面代码
③WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait

4)下拉框处理

from selenium.webdriver.support.select import Select
selectFruit= driver.find_element_by_id('select')
selectFruit.click()
Select(selectFruit).select_by_index(2)
Select(selectFruit).select_by_visible_text()
Select(selectFruit).select_by_value()

5)弹出框处理

alter=driver.switch_to_alert() #把控制权移交给对话框
alter.accept  #确认
alter.dismiss  #取消
alter.send_keys() #有输入框才可以使用,否则会报错from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
driver.find_element_by_name("tj_setting").click()#点击打开搜索设置
driver.find_element_by_id("SL_1").click()
driver.find_element_by_xpath("//div[@id='gxszButton']/input").click()#点击保存设置
alert=driver.switch_to_alert()#获取网页上的警告信息
alert.accept()#接收警告信息
dirver.quit()

6)多窗口处理(使用句柄方式切换)

driver.window_handles #列车所有句柄
driver.current_window_handle #显示当前句柄
driver.switch_to_window (driver.window_handles[2])#切换句柄from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
nowhandle=driver.current_window_handle#获得当前窗口
driver.find_element_by_name("tj_reg").click()#打开注册新窗口
allhandles=driver.window_handles#获得所有窗口
#循环判断窗口是否为当前窗口
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print 'now register window!'
#切换到邮箱注册标签
driver.find_element_by_id("mailRegTab").click()
time.sleep(5)
driver.close()
#回到原先的窗口
driver.switch_to_window(nowhandle)
driver.find_element_by_id("kw").send_keys(u"注册成功!")
time.sleep(3)
driver.quit()

7)断言判断

size
text
get_attribute(name)
is displayed()
tile
current_url

8)复选框处理

使用元素定位找到一组标签(在element加s=elements)
使用索引选择选项:pop(1)

from selenium import webdriver

import os
driveriver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('checkbox.html')
driver.get(file_path)
# 选择所有的 type 为 checkbox 的元素并单击勾选
checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()

9)表单嵌套

使用元素找到表达,再使用switch_to_frame()移交控制权
直接退出表单最外层:switch_to_default_content()
直接退出表单上一层:switch_to.parent_content()

from selenium import webdriver
import time
import os
driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('frame.html')
driver.get(file_path)
driver.implicitly_wait(30)
#先找到到 ifrome1(id = f1)
driver.switch_to_frame("f1")
#再找到其下面的 ifrome2(id =f2)
driver.switch_to_frame("f2")
#下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

10)上传文件

from selenium import webdriver
import os,time
driver = webdriver.Firefox()#打开上传文件页面
file_path = 'file:///' + os.path.abspath('upload_file.html')
driver.get(file_path)#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
time.sleep(2)
driver.quit()

11)下载

import os
from selenium import webdriver
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream")
browser = webdriver.Firefox(firefox_profile=fp)
browser.get("http://pypi.python.org/pypi/selenium")
browser.find_element_by_partial_link_text("selenium-2").click()

12)cookie

①获取cookie
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.youdao.com")
# 获得 cookie 信息
cookie= driver.get_cookies()
#将获得 cookie 的信息打印
print cookie②对cookie操作
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.youdao.com")
#向 cookie 的 name 和 value 添加会话信息。
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
#遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])
##### 下面可以通过两种方式删除 cookie #####
# 删除一个特定的 cookie
driver.delete_cookie("CookieName")
# 删除所有 cookie
driver.delete_all_cookies()

13)滚动条操作

from selenium import webdriver

import time
#访问百度
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
js=“windon.scrollTop(0,10000);”#新的写法,兼容性强(第一个参数调节左右,第二个参数调节上下)
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js_="var q=document.documentElement.scrollTop=0"
js=“windon.scrollTop(0,0);”#新的写法,兼容性强
driver.execute_script(js_)
time.sleep(3)

14)截图
driver.get_screenshot_as_file("图片存放的路径")
15)关闭窗口
driver.quit() #关闭所有窗口
driver.close() #关闭当前窗口

断言及获取:

text (文本,页面文字)  、 is_displayed(判断元素是否存在,返回是布尔值)  、 title(获取页面的title)、get_attribute()(获取属性的值)

assertEqual(a,b)

a == b

assertNotEqual(a,b)

a != b

assertTrue(x)

bool(x) 是 True

assertFalse(x)

bool(x) 是 False

assertIs(a,b)

a 是 b

assertIsNot(a,b)

a 是 不是 b

assertIsNone(x)

x 是 无

assertIsNotNone(x)

x 是 不是 无

assertIn(a,b)

a 在 b

assertNotIn(a,b)

a 不是 在 b

assertIsInstance(a,b)

isinstance(a, b)

assertNotIsInstance(a,b)

不是 isinstance(a, b)

  

 

测试用例的执行顺序:

①测试用例一定要test命名

②数字优先,再大写字母,最后到小写字母(通过命名case来控制用例执行顺序)

 

 

pycharm的快捷键

Alt+Enter 自动添加包

Ctrl + / 注释(取消注释)选择的行

Ctrl+Enter 补全

Ctrl + 鼠标 简介

Ctrl + Alt + L  代码格式化