├── README.md ├── checkbox.html ├── frame.html ├── test1.py ├── test10.py ├── test11.py ├── test12.py ├── test13.py ├── test14.py ├── test15.py ├── test16.py ├── test17.py ├── test18.py ├── test19.py ├── test2.py ├── test20.py ├── test21.py ├── test22.py ├── test3.py ├── test4.py ├── test5.py ├── test6.py ├── test7.py ├── test8.py ├── test9.py ├── web测试用例 ├── runtest.py └── test_case │ ├── test_baidu.py │ └── test_csdn.py ├── 发邮件 ├── send_mail.py └── send_mail2.py ├── 多线程 ├── mythread.py ├── onethread.py ├── onethread2.py ├── player.py └── threads.py ├── 数据驱动测试 ├── baidu.py ├── codeTest.py ├── info.csv ├── info.xml ├── public.py ├── read_csv.py ├── read_txt.py ├── read_xml1.py ├── read_xml2.py ├── read_xml3.py ├── read_xml4.py └── user_info.txt ├── 模块化驱动测试 ├── codeTest.py └── public.py └── 线性测试 └── test.py /README.md: -------------------------------------------------------------------------------- 1 | # selenium-demo 2 | selenium的一些自动化测试脚本,基于python语言。 3 | -------------------------------------------------------------------------------- /checkbox.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Checkbox 5 | 7 | 9 | 10 | 11 |

checkbox

12 |
13 |
14 |
15 | 16 |
17 | 18 |
19 |
20 |
21 | 22 |
23 | 24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 |
33 |
34 | 35 | -------------------------------------------------------------------------------- /frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 |
11 |
12 |

frame

13 | 16 |
17 |
18 | 19 | 21 | -------------------------------------------------------------------------------- /test1.py: -------------------------------------------------------------------------------- 1 | #控制浏览器窗口大小、前进、后退、刷新 2 | # coding=utf-8 3 | from selenium import webdriver 4 | 5 | driver=webdriver.Chrome() 6 | #访问百度首页 7 | first_url='http://www.baidu.com' 8 | print("now access %s" %(first_url)) 9 | driver.get(first_url) 10 | 11 | print("设置浏览器宽500,高800") 12 | driver.set_window_size(500,800) 13 | 14 | #访问学术页面 15 | second_url='http://xueshu.baidu.com/' 16 | print("now access %s" %(second_url)) 17 | driver.get(second_url) 18 | 19 | #后退到百度首页 20 | print("back to %s" %(first_url)) 21 | driver.back(); 22 | 23 | #前进到学术页 24 | print("forward to %s" %(second_url)) 25 | driver.forward() 26 | 27 | #刷新当前页面 28 | driver.refresh() 29 | 30 | driver.quit() -------------------------------------------------------------------------------- /test10.py: -------------------------------------------------------------------------------- 1 | #隐式等待 2 | from selenium import webdriver 3 | from selenium.common.exceptions import NoSuchElementException 4 | from time import ctime 5 | 6 | driver=webdriver.Chrome() 7 | 8 | #设置隐式等待为10秒 9 | driver.implicitly_wait(10) 10 | driver.get("http://www.baidu.com") 11 | 12 | try: 13 | print(ctime()) 14 | driver.find_element_by_id("kw22").send_keys('selenium') 15 | except NoSuchElementException as e: 16 | print(e) 17 | finally: 18 | print(ctime()) 19 | driver.quit() 20 | 21 | -------------------------------------------------------------------------------- /test11.py: -------------------------------------------------------------------------------- 1 | #sleep休眠方法 2 | from selenium import webdriver 3 | from time import sleep 4 | 5 | driver=webdriver.Chrome() 6 | driver.get("http://www.baidu.com") 7 | 8 | sleep(2) 9 | driver.find_element_by_id("kw").send_keys("Selenium2") 10 | driver.find_element_by_id("su").click() 11 | sleep(3) 12 | 13 | driver.quit() 14 | -------------------------------------------------------------------------------- /test12.py: -------------------------------------------------------------------------------- 1 | #通过tag name的定位方式定位一组元素 2 | from selenium import webdriver 3 | import os,time 4 | 5 | driver=webdriver.Chrome() 6 | file_path='file:///'+os.path.abspath('checkbox.html') 7 | driver.get(file_path) 8 | 9 | #选择页面上所有的tag name为input的元素 10 | inputs=driver.find_elements_by_tag_name('input') 11 | 12 | #然后从中过滤出type为checkbox的元素,单击勾选 13 | for i in inputs: 14 | if i.get_attribute('type')=='checkbox': 15 | i.click() 16 | time.sleep(1) 17 | 18 | driver.quit() -------------------------------------------------------------------------------- /test13.py: -------------------------------------------------------------------------------- 1 | #通过XPath或CSS查找一组元素 2 | from selenium import webdriver 3 | import os,time 4 | 5 | driver=webdriver.Chrome() 6 | file_path='file:///'+os.path.abspath('checkbox.html') 7 | driver.get(file_path) 8 | 9 | #通过XPath找到type=checkbox的元素 10 | #checkboxes=driver.find_elements_by_xpath("//input[@type='checkbox']") 11 | 12 | #通过CSS的方式找到type=checkbox的元素 13 | checkboxes=driver.find_elements_by_css_selector('input[type=checkbox]') 14 | 15 | for checkbox in checkboxes: 16 | checkbox.click() 17 | time.sleep(1) 18 | 19 | #打印当前页面上type为checkbox的个数 20 | print(len(checkboxes)) 21 | 22 | #把页面上最后1个checkbox的钩去掉 23 | driver.find_elements_by_css_selector('input[type=checkbox]').pop().click() 24 | time.sleep(1) 25 | 26 | driver.quit() -------------------------------------------------------------------------------- /test14.py: -------------------------------------------------------------------------------- 1 | #多表单切换 2 | from selenium import webdriver 3 | import time 4 | import os 5 | 6 | driver=webdriver.Chrome() 7 | file_path='file:///'+os.path.abspath('frame.html') 8 | driver.get(file_path) 9 | 10 | #切换到iframe(id="if") 11 | driver.switch_to_frame("if") 12 | 13 | #下面可以正常的操作元素了 14 | driver.find_element_by_id("kw").send_keys("Selenium2") 15 | driver.find_element_by_id("su").click() 16 | time.sleep(3) 17 | 18 | driver.quit() 19 | -------------------------------------------------------------------------------- /test15.py: -------------------------------------------------------------------------------- 1 | #多窗口切换 2 | from selenium import webdriver 3 | import time 4 | 5 | driver=webdriver.Chrome() 6 | driver.implicitly_wait(10) 7 | driver.get("http://www.baidu.com") 8 | 9 | #获得百度搜索窗口句柄 10 | search_windows=driver.current_window_handle 11 | 12 | driver.find_element_by_xpath("//div[@id='u1']/a[7]").click() 13 | driver.find_element_by_link_text('立即注册').click() 14 | 15 | #获得当前所有打开的窗口的句柄 16 | all_handles=driver.window_handles 17 | 18 | #进入注册窗口 19 | for handle in all_handles: 20 | if handle!=search_windows: 21 | driver.switch_to.window(handle) 22 | print('now register window!') 23 | driver.find_element_by_name("userName").send_keys('username') 24 | driver.find_element_by_name('password').send_keys('password') 25 | time.sleep(2) 26 | #... 27 | #回到搜索窗口 28 | for handle in all_handles: 29 | if handle==search_windows: 30 | driver.switch_to.window(handle) 31 | print('now search window!') 32 | driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click() 33 | driver.find_element_by_id("kw").send_keys("Selenium2") 34 | driver.find_element_by_id("su").click() 35 | time.sleep(2) 36 | 37 | driver.quit() 38 | -------------------------------------------------------------------------------- /test16.py: -------------------------------------------------------------------------------- 1 | #警告框处理 2 | from selenium import webdriver 3 | from selenium.webdriver.common.action_chains import ActionChains 4 | import time 5 | from selenium.webdriver.common.by import By 6 | from selenium.webdriver.support.ui import WebDriverWait 7 | from selenium.webdriver.support import expected_conditions as EC 8 | driver=webdriver.Chrome() 9 | #driver.implicitly_wait(10) 10 | driver.get("http://www.baidu.com") 11 | 12 | #鼠标悬停至“设置”链接 13 | link=driver.find_element_by_xpath("//div[@id='u1']/a[8]") 14 | ActionChains(driver).move_to_element(link).perform() 15 | 16 | #打开搜索设置 17 | driver.find_element_by_link_text("搜索设置").click() 18 | 19 | #保存设置 20 | element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"prefpanelgo"))) 21 | element.click() 22 | time.sleep(2) 23 | 24 | #接受警告框 25 | driver.switch_to_alert().accept() 26 | 27 | driver.quit() 28 | -------------------------------------------------------------------------------- /test17.py: -------------------------------------------------------------------------------- 1 | #获取当前浏览器cookie 2 | from selenium import webdriver 3 | 4 | driver=webdriver.Chrome() 5 | driver.get("http://www.youdao.com") 6 | 7 | #获得cookie信息 8 | cookie=driver.get_cookies() 9 | #将获得cookie的信息打印 10 | print(cookie) 11 | 12 | driver.quit() 13 | -------------------------------------------------------------------------------- /test18.py: -------------------------------------------------------------------------------- 1 | #写入cookie 2 | from selenium import webdriver 3 | 4 | driver=webdriver.Chrome() 5 | driver.get("http://www.youdao.com") 6 | 7 | #向cookie的name和value中添加会话信息 8 | driver.add_cookie({'name':'key-aaaaaaa','value':'value-bbbbbb'}) 9 | 10 | #遍历cookie中的name和value信息并打印,当然还有上面添加的信息 11 | for cookie in driver.get_cookies(): 12 | print("%s -> %s" % (cookie['name'],cookie['value'])) 13 | 14 | driver.quit() 15 | -------------------------------------------------------------------------------- /test19.py: -------------------------------------------------------------------------------- 1 | #调用JavaScript控制滚动条 2 | '''WebDriver提供了execute_script()方法来执行JavaScript代码 3 | 用于调整浏览器滚动条位置的JavaScript代码如下: 4 | window.scrollTo(左边距,上边距)''' 5 | from selenium import webdriver 6 | from time import sleep 7 | 8 | #访问百度 9 | driver=webdriver.Chrome() 10 | driver.get("http://www.baidu.com") 11 | 12 | #搜索 13 | driver.find_element_by_id("kw").send_keys("Selenium2") 14 | driver.find_element_by_id("su").click() 15 | sleep(2) 16 | 17 | #设置浏览器窗口大小 18 | driver.set_window_size(600,600) 19 | 20 | #通过javascript设置浏览器窗口的滚动条位置 21 | js="window.scrollTo(100,450);" 22 | driver.execute_script(js) 23 | sleep(3) 24 | 25 | driver.quit() -------------------------------------------------------------------------------- /test2.py: -------------------------------------------------------------------------------- 1 | #常用鼠标键盘操作 2 | 3 | from selenium import webdriver 4 | 5 | driver=webdriver.Chrome() 6 | driver.get("http://www.csdn.net/") 7 | driver.find_element_by_xpath("//cite[@id='login']/a").click(); 8 | 9 | driver.find_element_by_id("username").clear() 10 | driver.find_element_by_id("username").send_keys("zhangsan") 11 | driver.find_element_by_id("password").clear() 12 | driver.find_element_by_id("password").send_keys("123456") 13 | driver.find_element_by_class_name("logging").click() 14 | #driver.find_element_by_class_name("logging").submit() 15 | 16 | driver.quit() 17 | -------------------------------------------------------------------------------- /test20.py: -------------------------------------------------------------------------------- 1 | #处理HTML5的视频播放 2 | from selenium import webdriver 3 | from time import sleep 4 | 5 | driver=webdriver.Chrome() 6 | driver.get("http://videojs.com/") 7 | 8 | video=driver.find_element_by_xpath("html/body/section[1]/div/video") 9 | 10 | #返回播放文件地址 11 | url=driver.execute_script("return arguments[0].currentSrc;",video) 12 | print(url) 13 | 14 | #播放视频 15 | print("start") 16 | driver.execute_script("return arguments[0].play()",video) 17 | 18 | #播放15秒钟 19 | sleep(15) 20 | 21 | #暂停视频 22 | print("sleep") 23 | driver.execute_script("arguments[0].pause()",video) 24 | 25 | driver.quit() 26 | -------------------------------------------------------------------------------- /test21.py: -------------------------------------------------------------------------------- 1 | #窗口截图 2 | from selenium import webdriver 3 | from time import sleep 4 | 5 | driver=webdriver.Chrome() 6 | driver.get("http://www.baidu.com") 7 | 8 | driver.find_element_by_id("kw").send_keys("Selenium2") 9 | driver.find_element_by_id("su").click() 10 | sleep(2) 11 | 12 | #截取当前窗口,并指定截图图片的保存位置 13 | driver.get_screenshot_as_file("D:\\python\\workspace\\baidu\\baidu_img.jpg") 14 | 15 | driver.quit() 16 | -------------------------------------------------------------------------------- /test22.py: -------------------------------------------------------------------------------- 1 | #捕捉客户端向服务器发送的POST请求 2 | from selenium import webdriver 3 | import logging 4 | 5 | logging.basicConfig(level=logging.DEBUG) 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.baidu.com") 8 | 9 | driver.find_element_by_id("kw").send_keys("Selenium2") 10 | driver.find_element_by_id("su").click() 11 | driver.quit() 12 | -------------------------------------------------------------------------------- /test3.py: -------------------------------------------------------------------------------- 1 | #WebElement接口常用方法 2 | #size获得元素的尺寸;text获取元素的文本; 3 | #get_attribute(name)获得属性值;is_displayed()设置该元素是否用户可见 4 | from selenium import webdriver 5 | 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.baidu.com") 8 | #获得输入框的尺寸 9 | size=driver.find_element_by_id("kw").size 10 | print(size) 11 | #返回百度页面底部备案信息 12 | text=driver.find_element_by_id("cp").text 13 | print(text) 14 | #返回元素的属性值 15 | attribute=driver.find_element_by_id("kw").get_attribute('type') 16 | print(attribute) 17 | #返回元素的结果是否可见,返回结果为True或False 18 | result=driver.find_element_by_id("kw").is_displayed() 19 | print(result) 20 | 21 | driver.quit() 22 | -------------------------------------------------------------------------------- /test4.py: -------------------------------------------------------------------------------- 1 | #鼠标右击 2 | # coding=utf-8 3 | from selenium import webdriver 4 | from selenium.webdriver.common.action_chains import ActionChains 5 | 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.csdn.net/") 8 | #定位到要右击的元素 9 | right_click=driver.find_element_by_xpath("//cite[@id='login']/a") 10 | #对定位到的元素执行点击右键的操作 11 | ActionChains(driver).context_click(right_click).perform() 12 | 13 | driver.quit() 14 | -------------------------------------------------------------------------------- /test5.py: -------------------------------------------------------------------------------- 1 | #鼠标悬停 2 | # coding=utf-8 3 | from selenium import webdriver 4 | from selenium.webdriver.common.action_chains import ActionChains 5 | 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.baidu.com") 8 | 9 | #定位到要悬停的元素 10 | above=driver.find_element_by_xpath("//div[@id='u1']/a[8]") 11 | #对定位到的元素执行悬停操作 12 | ActionChains(driver).move_to_element(above).perform() 13 | 14 | driver.quit() 15 | -------------------------------------------------------------------------------- /test6.py: -------------------------------------------------------------------------------- 1 | #键盘事件 2 | # coding=utf-8 3 | from selenium import webdriver 4 | from selenium.webdriver.common.keys import Keys 5 | 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.baidu.com") 8 | #输入框输入内容 9 | driver.find_element_by_id("kw").send_keys("Seleniumm") 10 | #删除多输入的一个m 11 | driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) 12 | #输入空格键+“教程” 13 | driver.find_element_by_id("kw").send_keys(Keys.SPACE) 14 | driver.find_element_by_id("kw").send_keys("教程") 15 | #ctrl+a 全选输入框内容 16 | driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') 17 | #ctrl+x 剪切输入框内容 18 | driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') 19 | #ctrl+v 粘贴内容到输入框 20 | driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') 21 | #回车 22 | driver.find_element_by_id("kw").send_keys(Keys.ENTER) 23 | 24 | driver.quit() 25 | -------------------------------------------------------------------------------- /test7.py: -------------------------------------------------------------------------------- 1 | #获得验证信息 2 | #我们可以把登陆之后的这些信息存放起来,作为登陆是否成功的验证信息 3 | from selenium import webdriver 4 | import time 5 | 6 | driver=webdriver.Chrome() 7 | driver.get("http://www.csdn.net/") 8 | driver.find_element_by_xpath("//cite[@id='login']/a").click(); 9 | 10 | print('Before login==============================') 11 | 12 | #打印当前页面title 13 | title=driver.title 14 | print(title) 15 | 16 | #打印当前页面URL 17 | now_url=driver.current_url 18 | print(now_url) 19 | 20 | #执行登陆 21 | driver.find_element_by_id("username").clear() 22 | driver.find_element_by_id("username").send_keys("dreamchasering") 23 | driver.find_element_by_id("password").clear() 24 | driver.find_element_by_id("password").send_keys("123456") 25 | driver.find_element_by_class_name("logging").click() 26 | time.sleep(5) 27 | 28 | print('After login================================') 29 | 30 | #再次打印当前页面title 31 | title=driver.title 32 | print(title) 33 | 34 | #打印当前页面URL 35 | now_url=driver.current_url 36 | print(now_url) 37 | 38 | user=driver.find_element_by_xpath("//a[@href='/dreamchasering' and @target='_blank']").text 39 | print(user) 40 | 41 | driver.quit() 42 | -------------------------------------------------------------------------------- /test8.py: -------------------------------------------------------------------------------- 1 | #显示等待1 2 | from selenium import webdriver 3 | from selenium.webdriver.common.by import By 4 | from selenium.webdriver.support.ui import WebDriverWait 5 | from selenium.webdriver.support import expected_conditions as EC 6 | 7 | driver=webdriver.Chrome() 8 | driver.get("http://www.baidu.com") 9 | 10 | element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw'))) 11 | element.send_keys("Selenium2") 12 | driver.find_element_by_id("su").click() 13 | driver.quit() 14 | -------------------------------------------------------------------------------- /test9.py: -------------------------------------------------------------------------------- 1 | #显示等待2 2 | from selenium import webdriver 3 | from time import sleep,ctime 4 | 5 | driver=webdriver.Chrome() 6 | driver.get("http://www.baidu.com") 7 | 8 | print(ctime()) 9 | for i in range(10): 10 | try: 11 | el=driver.find_element_by_id("kw22") 12 | if(el.is_displayed()): 13 | break 14 | except:pass 15 | sleep(1) 16 | else: 17 | print("time out") 18 | driver.close() 19 | print(ctime()) 20 | 21 | -------------------------------------------------------------------------------- /web测试用例/runtest.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | test_dir="./test_case" 4 | discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') 5 | 6 | if __name__=='__main__': 7 | runner=unittest.TextTestRunner() 8 | runner.run(discover) -------------------------------------------------------------------------------- /web测试用例/test_case/test_baidu.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | import unittest 3 | import time 4 | 5 | class MyTest(unittest.TestCase): 6 | def setUp(self): 7 | self.driver=webdriver.Chrome() 8 | self.driver.maximize_window() 9 | self.driver.implicitly_wait(10) 10 | self.base_url="http://www.baidu.com" 11 | 12 | def test_baidu(self): 13 | driver=self.driver 14 | driver.get(self.base_url+"/") 15 | driver.find_element_by_id("kw").clear() 16 | driver.find_element_by_id("kw").send_keys("unittest") 17 | driver.find_element_by_id("su").click() 18 | time.sleep(2) 19 | title=driver.title 20 | self.assertEquals(title,"unittest_百度搜索") 21 | 22 | def tearDown(self): 23 | self.driver.quit() 24 | 25 | if __name__=="__main__": 26 | unittest.main() -------------------------------------------------------------------------------- /web测试用例/test_case/test_csdn.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | import unittest 3 | import time 4 | 5 | 6 | class MyTest(unittest.TestCase): 7 | def setUp(self): 8 | self.driver = webdriver.Chrome() 9 | self.driver.maximize_window() 10 | self.driver.implicitly_wait(10) 11 | self.base_url = "http://www.csdn.net" 12 | 13 | 14 | def test_baidu(self): 15 | driver = self.driver 16 | driver.get(self.base_url + "/") 17 | driver.find_element_by_xpath("//cite[@id='login']/a").click(); 18 | time.sleep(2) 19 | title = driver.title 20 | #print(title) 21 | self.assertEquals(title, "帐号登录") 22 | 23 | def tearDown(self): 24 | self.driver.quit() 25 | 26 | 27 | if __name__ == "__main__": 28 | unittest.main() -------------------------------------------------------------------------------- /发邮件/send_mail.py: -------------------------------------------------------------------------------- 1 | #发送HTML格式的邮件 2 | import smtplib 3 | from email.mime.text import MIMEText 4 | from email.header import Header 5 | 6 | #发送邮箱服务器 7 | smtpserver='smtp.163.com' 8 | #发送邮箱用户/密码 9 | user='username@163.com' 10 | password='123456' 11 | #发送邮箱 12 | sender='username@163.com' 13 | #接受邮箱 14 | receiver='receive@163.com' 15 | #发送邮箱主题 16 | subject='python email test' 17 | 18 | #编写HTML类型的邮件正文 19 | msg=MIMEText('

你好!

','html','utf-8') 20 | msg['Subject']=Header(subject,'utf-8') 21 | 22 | #连接发送邮件 23 | smtp=smtplib.SMTP() 24 | smtp.connect(smtpserver) 25 | smtp.login(user,password) 26 | smtp.sendmail(sender,receiver,msg.as_string()) 27 | smtp.quit() -------------------------------------------------------------------------------- /发邮件/send_mail2.py: -------------------------------------------------------------------------------- 1 | #发送带附件的邮件 2 | import smtplib 3 | from email.mime.text import MIMEText 4 | from email.mime.multipart import MIMEMultipart 5 | 6 | #发送邮箱服务器 7 | smtpserver='smtp.163.com' 8 | #发送邮箱用户/密码 9 | user='username@163.com' 10 | password='123456' 11 | #发送邮箱 12 | sender='username@163.com' 13 | #接受邮箱 14 | receiver='receive@163.com' 15 | #发送邮箱主题 16 | subject='python email test' 17 | 18 | #发送的附件 19 | sendfile=open('D:\\python\\report\\log.txt','rb').read() 20 | 21 | att=MIMEText(sendfile,'base64','utf-8') 22 | att["Content-Type"]='application/octet-stream' 23 | att["Content-Disposition"]='attachment;filename="log.txt"' 24 | 25 | msgRoot=MIMEMultipart('related') 26 | msgRoot['Subject']=subject 27 | msgRoot.attach(att) 28 | 29 | #连接发送邮件 30 | smtp=smtplib.SMTP() 31 | smtp.connect(smtpserver) 32 | smtp.login(user,password) 33 | smtp.sendmail(sender,receiver,msgRoot.as_string()) 34 | smtp.quit() -------------------------------------------------------------------------------- /多线程/mythread.py: -------------------------------------------------------------------------------- 1 | #自定义线程类 2 | import threading 3 | from time import sleep,ctime 4 | 5 | #创建线程类 6 | class MyThread(threading.Thread): 7 | def __init__(self,func,args,name=''): 8 | threading.Thread.__init__(self) 9 | self.func=func 10 | self.args=args 11 | self.name=name 12 | 13 | def run(self): 14 | self.func(*self.args) 15 | 16 | def super_play(file,time): 17 | for i in range(2): 18 | print('Start playing:%s! %s' %(file,ctime())) 19 | sleep(time) 20 | 21 | lists={'爱情买卖.mp3':3,'阿凡达':5,'我和你':4} 22 | 23 | threads=[] 24 | 25 | for file,time in lists.items(): 26 | t=MyThread(super_play,(file,time),super_play.__name__) 27 | threads.append(t) 28 | 29 | if __name__=='__main__': 30 | #启动线程 31 | for i in range(len(lists)): 32 | threads[i].start() 33 | for i in range(len(lists)): 34 | threads[i].join() 35 | print('end:%s' %ctime()) -------------------------------------------------------------------------------- /多线程/onethread.py: -------------------------------------------------------------------------------- 1 | from time import sleep,ctime 2 | 3 | #听音乐任务 4 | def music(): 5 | print('I was listening to music! %s'%ctime()) 6 | sleep(2) 7 | 8 | 9 | #看电影任务 10 | def movie(): 11 | print('I was at the movies!' , ctime()) 12 | sleep(5) 13 | 14 | if __name__=='__main__': 15 | music() 16 | movie() 17 | print('all end:',ctime()) -------------------------------------------------------------------------------- /多线程/onethread2.py: -------------------------------------------------------------------------------- 1 | from time import sleep,ctime 2 | 3 | #音乐播放器 4 | def music(func,loop): 5 | for i in range(loop): 6 | print('I was listening to %s! %s' %(func,ctime())) 7 | sleep(2) 8 | 9 | #视频播放器 10 | def movie(func,loop): 11 | for i in range(loop): 12 | print('I was at the %s! %s' %(func,ctime())) 13 | sleep(5) 14 | 15 | if __name__=='__main__': 16 | music('爱情买卖',2) 17 | movie('阿凡达',2) 18 | print('all end:',ctime()) -------------------------------------------------------------------------------- /多线程/player.py: -------------------------------------------------------------------------------- 1 | #优化线程的创建 2 | from time import sleep,ctime 3 | import threading 4 | 5 | #创建超级播放器 6 | def super_player(file,time): 7 | for i in range(2): 8 | print('Start playing: %s! %s' %(file,ctime())) 9 | sleep(time) 10 | 11 | #播放的文件与文件时长 12 | lists={'爱情买卖.mp3':3,'阿凡达.mp4':5,'我和你':4} 13 | 14 | threads=[] 15 | 16 | #创建线程 17 | for file,time in lists.items(): 18 | t=threading.Thread(target=super_player,args=(file,time)) 19 | threads.append(t) 20 | 21 | if __name__=='__main__': 22 | #启动线程 23 | for t in range(len(lists)): 24 | threads[t].start() 25 | for t in range(len(lists)): 26 | threads[t].join() 27 | 28 | print('end: %s' %ctime()) -------------------------------------------------------------------------------- /多线程/threads.py: -------------------------------------------------------------------------------- 1 | #thread模块 2 | from time import sleep,ctime 3 | import threading 4 | 5 | #音乐播放器 6 | def music(func,loop): 7 | for i in range(loop): 8 | print("I was listening to %s! %s" %(func,ctime())) 9 | sleep(2) 10 | 11 | #视频播放器 12 | def movie(func,loop): 13 | for i in range(loop): 14 | print("I was at the %s! %s" %(func,ctime())) 15 | sleep(5) 16 | 17 | #创建线程数组 18 | threads=[] 19 | 20 | #创建线程t1,并添加到线程数组 21 | t1=threading.Thread(target=music,args=('爱情买卖',2)) 22 | threads.append(t1) 23 | 24 | #创建线程t2,并添加到线程数组 25 | t2=threading.Thread(target=movie,args=('阿凡达',2)) 26 | threads.append(t2) 27 | 28 | if __name__=='__main__': 29 | #启动线程 30 | for t in threads: 31 | t.start() 32 | #守护线程(对每个线程做终止等待) 33 | for t in threads: 34 | t.join() 35 | print('all end:%s' %ctime()) -------------------------------------------------------------------------------- /数据驱动测试/baidu.py: -------------------------------------------------------------------------------- 1 | #参数化搜索关键字 2 | from selenium import webdriver 3 | 4 | search_text=['python','selenium','text'] 5 | 6 | for text in search_text: 7 | driver=webdriver.Chrome() 8 | driver.implicitly_wait(10) 9 | driver.get("http://www.baidu.com") 10 | driver.find_element_by_id('kw').send_keys(text) 11 | driver.find_element_by_id('su').click() 12 | driver.quit() -------------------------------------------------------------------------------- /数据驱动测试/codeTest.py: -------------------------------------------------------------------------------- 1 | #参数化登陆 2 | from selenium import webdriver 3 | from public import Login 4 | 5 | class LoginTest(): 6 | 7 | def __init__(self): 8 | self.driver=webdriver.Chrome() 9 | self.driver.implicitly_wait(10) 10 | self.driver.get("http://www.acmcoder.com/index") 11 | 12 | def test_login(self): 13 | username='name' 14 | password='password' 15 | 16 | loginService = Login() 17 | loginService.user_login(self.driver,username,password) 18 | self.driver.quit() 19 | 20 | test=LoginTest() 21 | test.test_login() -------------------------------------------------------------------------------- /数据驱动测试/info.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreamchasering/selenium-demo/67b08e319165af9809bc07ae5bce96d4940c2916/数据驱动测试/info.csv -------------------------------------------------------------------------------- /数据驱动测试/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Windows 5 | Chrome 6 | http://www.baidu.com 7 | 8 | 9 | 10 | 11 | 北京 12 | 广东 13 | 深圳 14 | 珠海 15 | 浙江 16 | 杭州 17 | 18 | -------------------------------------------------------------------------------- /数据驱动测试/public.py: -------------------------------------------------------------------------------- 1 | #参数化登陆 2 | from selenium.webdriver import ActionChains 3 | 4 | class Login(): 5 | #登陆 6 | def user_login(self,driver,username,password): 7 | driver.find_element_by_xpath("//div[@class='header_right']/p/a[@href='/login']").click() 8 | 9 | driver.find_element_by_id("phone_ipt").clear() 10 | driver.find_element_by_id("phone_ipt").send_keys(username) 11 | driver.find_element_by_id("pwd_ipt").clear() 12 | driver.find_element_by_id("pwd_ipt").send_keys(password) 13 | driver.find_element_by_id("sbtn").click() 14 | 15 | #退出 16 | def user_logout(self,driver): 17 | above = driver.find_element_by_xpath("//div[@class='mguser']/div[@class='mguser-box']/a") 18 | ActionChains(driver).move_to_element(above).perform() 19 | driver.find_element_by_xpath("//ul[@class='mguser-cnt']/li[3]/a").click() 20 | driver.quit() 21 | -------------------------------------------------------------------------------- /数据驱动测试/read_csv.py: -------------------------------------------------------------------------------- 1 | #读取csv文件 2 | #导入csv包 3 | import csv 4 | #读取本地csv文件 5 | date=csv.reader(open('info.csv','r')) 6 | 7 | #循环输出每一行信息 8 | '''for user in date: 9 | print(user)''' 10 | 11 | #读取用户年龄 12 | for user in date: 13 | print(user[1]) -------------------------------------------------------------------------------- /数据驱动测试/read_txt.py: -------------------------------------------------------------------------------- 1 | #读取txt文件 2 | user_file=open('user_info.txt','r') 3 | lines=user_file.readlines() 4 | user_file.close() 5 | 6 | for line in lines: 7 | username=line.split(',')[0] 8 | password=line.split(',')[1] 9 | print(username,password) -------------------------------------------------------------------------------- /数据驱动测试/read_xml1.py: -------------------------------------------------------------------------------- 1 | #读取xml文件 2 | #获得标签信息 3 | from xml.dom import minidom 4 | 5 | #打开xml文档 6 | dom=minidom.parse('info.xml') 7 | 8 | #得到文档元素对象 9 | root=dom.documentElement 10 | 11 | print(root.nodeName)#节点名称 12 | print(root.nodeValue)#节点的值,只对文本节点有效 13 | print(root.nodeType)#节点的类型 14 | print(root.ELEMENT_NODE) -------------------------------------------------------------------------------- /数据驱动测试/read_xml2.py: -------------------------------------------------------------------------------- 1 | #读取xml文件 2 | #获得任意标签名 3 | from xml.dom import minidom 4 | 5 | #打开xml文档 6 | dom=minidom.parse('info.xml') 7 | 8 | #得到文档元素对象 9 | root=dom.documentElement 10 | 11 | tagname=root.getElementsByTagName('browser')#可以通过标签名获取标签,所获取的对象以数组形式存放 12 | print(tagname[0].tagName) 13 | 14 | tagname=root.getElementsByTagName('login') 15 | print(tagname[1].tagName) 16 | 17 | tagname=root.getElementsByTagName('province') 18 | print(tagname[2].tagName) -------------------------------------------------------------------------------- /数据驱动测试/read_xml3.py: -------------------------------------------------------------------------------- 1 | #读取xml文件 2 | #获得标签的属性值 3 | from xml.dom import minidom 4 | 5 | #打开xml文档 6 | dom=minidom.parse('info.xml') 7 | 8 | #得到文档元素对象 9 | root=dom.documentElement 10 | 11 | logins=root.getElementsByTagName('login')#可以通过标签名获取标签,所获取的对象以数组形式存放 12 | 13 | #获得login标签的username属性值 14 | username=logins[0].getAttribute("username") 15 | print(username) 16 | 17 | #获得login标签的password属性值 18 | password=logins[0].getAttribute("password") 19 | print(password) 20 | 21 | #获得第二个login标签的username属性值 22 | username=logins[1].getAttribute("username") 23 | print(username) 24 | 25 | #获得第二个login标签的password属性值 26 | password=logins[1].getAttribute("password") 27 | print(password) 28 | -------------------------------------------------------------------------------- /数据驱动测试/read_xml4.py: -------------------------------------------------------------------------------- 1 | #读取xml文件 2 | #获得标签对之间的数据 3 | from xml.dom import minidom 4 | 5 | #打开xml文档 6 | dom=minidom.parse('info.xml') 7 | 8 | #得到文档元素对象 9 | root=dom.documentElement 10 | 11 | provinces=root.getElementsByTagName('province') 12 | cities=root.getElementsByTagName('city') 13 | 14 | #获得第二个province标签对的值 15 | p2=provinces[1].firstChild.data#firstChild属性返回被选节点的第一个子节点;data表示获取该节点的数据 16 | print(p2) 17 | 18 | #获得第一个city标签对的值 19 | c1=cities[0].firstChild.data 20 | print(c1) 21 | 22 | #获得第二个city标签对的值 23 | c2=cities[1].firstChild.data 24 | print(c2) -------------------------------------------------------------------------------- /数据驱动测试/user_info.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreamchasering/selenium-demo/67b08e319165af9809bc07ae5bce96d4940c2916/数据驱动测试/user_info.txt -------------------------------------------------------------------------------- /模块化驱动测试/codeTest.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from public import Login 3 | 4 | driver=webdriver.Chrome() 5 | driver.implicitly_wait(10) 6 | driver.get("http://www.acmcoder.com/index") 7 | 8 | loginService = Login() 9 | #调用登陆模块 10 | loginService.user_login(driver) 11 | #调用退出模块 12 | loginService.user_logout(driver) 13 | -------------------------------------------------------------------------------- /模块化驱动测试/public.py: -------------------------------------------------------------------------------- 1 | #模块化驱动测试实例 2 | from selenium.webdriver import ActionChains 3 | 4 | class Login(): 5 | #登陆 6 | def user_login(self,driver): 7 | driver.find_element_by_xpath("//div[@class='header_right']/p/a[@href='/login']").click() 8 | 9 | driver.find_element_by_id("phone_ipt").clear() 10 | driver.find_element_by_id("phone_ipt").send_keys("name") 11 | driver.find_element_by_id("pwd_ipt").clear() 12 | driver.find_element_by_id("pwd_ipt").send_keys("password") 13 | driver.find_element_by_id("sbtn").click() 14 | 15 | #退出 16 | def user_logout(self,driver): 17 | above = driver.find_element_by_xpath("//div[@class='mguser']/div[@class='mguser-box']/a") 18 | ActionChains(driver).move_to_element(above).perform() 19 | driver.find_element_by_xpath("//ul[@class='mguser-cnt']/li[3]/a").click() 20 | driver.quit() 21 | -------------------------------------------------------------------------------- /线性测试/test.py: -------------------------------------------------------------------------------- 1 | #线性测试实例 2 | from selenium import webdriver 3 | from selenium.webdriver.common.action_chains import ActionChains 4 | 5 | driver=webdriver.Chrome() 6 | driver.implicitly_wait(10) 7 | driver.get("http://www.acmcoder.com/index") 8 | 9 | #登陆 10 | driver.find_element_by_xpath("//div[@class='header_right']/p/a[@href='/login']").click() 11 | 12 | driver.find_element_by_id("phone_ipt").clear() 13 | driver.find_element_by_id("phone_ipt").send_keys("name") 14 | driver.find_element_by_id("pwd_ipt").clear() 15 | driver.find_element_by_id("pwd_ipt").send_keys("password") 16 | driver.find_element_by_id("sbtn").click() 17 | 18 | #退出 19 | above=driver.find_element_by_xpath("//div[@class='mguser']/div[@class='mguser-box']/a") 20 | ActionChains(driver).move_to_element(above).perform() 21 | driver.find_element_by_xpath("//ul[@class='mguser-cnt']/li[3]/a").click() 22 | driver.quit() --------------------------------------------------------------------------------