├── 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 |
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()
--------------------------------------------------------------------------------