python+selenium 第二套学习
01视频:
更新pip版本,在cmd窗口敲击: python -m pip install --upgrade pip
安装selenium命令:
pip install selenium
展示selenium版本:
pip show selenium
#coding=utf-8
#第一行的编码设置注意不要加入空格
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()
02视频: #coding=utf-8 name = 'zhangsan' age = 28 print (type(name)) print (name,age) #打印 数据之间的连接 print('name',name,age,a) print('name: %s,age: %d'%(name,age))
#数组 a = ['a',2,'asa','jian'] #增加数组值 a.append('word') print(a) #字典 z = {"key":"value","name":"zhansan","password":123} #输出key值 for i in z.keys(): print(i) #输出value值 for i in z.values(): print(i) #输出key 和 value值 for k,v in z.items(): print(k,v) 输出: key value password 123 name zhansan
#python的引包规则 #1、当前目录下去找 #2、python安装目录下Lib文件夹中找 #3、系统环境变量path中找 #4、对应包的目录下要有个 __init__.py文件 #引入sys,在环境变量中添加对于包的名称,再正常引包 import sys sys.path.append('\tjabc') from tjabc.tjadd import add print(add(4,5))
输出:
9

#异常处理 try: f = open('hello.txt','r')# r 读 w 写 a 增加 except BaseException as e: print (e) try: print ("a") except Exception as bb: print(bb) #当except 没有被执行时,将会执行else else: print('无异常') try: print (aa) except Exception as ee: print (ee) #报不报错,finally都会被执行 finally: print('都会执行')

b = 'tome' #抛出自定义异常 if b != 'tom': raise NameError('b 不是 tom')

03视频 #coding=utf-8 def add(a=4,b=9): return a+b #使用默认参数时 print(add()) #使用自定义的参数 print(add(4,5))

#类,函数,方法 #三种写法 #1、直接定义类名 class A: #2、规范一点,加个括号,用于继承保留的括号,推荐用这种 class A(): #3、声明类是继承object的 class A(object):
class A(): #初始化方法,调用类的时候会先执行这个初始化方法 def __init__(self,a,b): #self. 就是自己的意思 self.a = int(a) self.b = int(b) #类下面的是方法,通过def定义 #self是类下面的方法的第一个参数,必须要显示出来,这是Python的规范 def add(self): return self.a+self.b v = A(8,10) n = v.add() print(n)

class A(): #初始化方法,调用类的时候会先执行这个初始化方法 def __init__(self,a,b): #self. 就是自己的意思 self.a = int(a) self.b = int(b) #类下面的是方法,通过def定义 #self是类下面的方法的第一个参数,必须要显示出来,这是Python的规范 def add(self): return self.a+self.b #B类继承A类,B类可以使用A类的方法 class B(A): def sub(self): return self.a - self.b #如下可以看成是个测试,验证结果,需要测试的内容就写在if __name__ == '__main__'下面 #这样别的地方导包的时候就不会执行到如下测试的内容,如果测试的内容是写在外面的, #测试的内容就会在导包时一起被执行 if __name__ == '__main__': v = B(15,10) #使用A类里面的方法 s = v.add() #使用B类里面的方法 n = v.sub() print(s,n)

try: print(aa) #使用except,BaseException,所有异常类的基类,可以使用这两个参数去接收所有的异常 except BaseException as er: print(er)

04视频:
05视频:
#coding=utf-8 #size 获取元素的尺寸 #text 获取元素的文本,测试用例中的断言可以用到 #get_attribute(name) 获得属性值 #is_displayed() 断言该元素是否用户可见 from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') #获取百度输入框的size a = driver.find_element_by_id('kw').size print(a) #获取百度页面底部备案信息 b = driver.find_element_by_id('cp').text print(b) #返回元素的属性值,可以是id,name,type或其他任意属性 #<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"> c = driver.find_element_by_id('kw').get_attribute('name') print(c) #判断元素是否可见,返回结果为Ture或False d = driver.find_element_by_id('kw').is_displayed() print(d) driver.quit()
#写自动化测试用例的时候,用来做断言(验证) # url # title # text from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com/') #获取搜索前的title和URL title1 = driver.title print(title1) urlone = driver.current_url print(urlone) #获取搜索后的title和URL driver.find_element_by_id('kw').send_keys('selenium') sleep(1) driver.find_element_by_id('su').click() title2 = driver.title print(title2) urltwo = driver.current_url print(urltwo) #断言 if title2 == 'selenium_百度搜索': print('test case pass') else: print('test case error') driver.quit()
#显示等待,针对某个元素等待 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver= webdriver.Chrome() driver.get('https://www.baidu.com/') #等待5秒,每0.5秒检查一次,元素是否存在 element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw"))) element.send_keys('selenium') driver.quit()
#如在项目当中也可以这样写 from selenium import webdriver driver= webdriver.Chrome() driver.get('https://www.baidu.com/') from time import ctime,sleep print(ctime()) for i in range(0,10): try: element = driver.find_element_by_id('kw1') if element.is_displayed():#是否发现元素 break except:
pass sleep(1) else: print('元素未发现') driver.close() print(ctime())

#隐式等待,针对当前页面当中的所有元素等待 from selenium import webdriver from time import sleep driver= webdriver.Chrome() #隐式等待10秒 driver.implicitly_wait(10) driver.get('https://www.baidu.com/') driver.find_element_by_id('kw').send_keys('selenium') sleep(2) driver.quit()
06视频:
# 切换表单 driver.switch_to_frame('kw') #可以是元素的id或name #如下为通过xpath切换表单 xp = driver.find_element_by_xpath('//iframe[@id="if"]') driver.switch_to_frame(xp) #切换表单,如已经进入了多层的表单里面,需要退出到最外层的表单 driver.switch_to.default_content() #返回上一级表单 driver.switch_to.parent_content()
#窗口切换 #获取当前窗口的句柄 windowsnow = driver.current_window_handle #获取当前所有打开的窗口句柄 all_handles = driver.window_handles #多窗口切换,只要获取窗口的句柄,就容易切换了,如下可遍历后进行窗口之间的切换 #也可切换窗口后,再获取当前页面的句柄,方便后面继续多窗口切换操作 for wind in all_handles: if wind != windowsnow: driver.switch_to_window(wind) #切换到wind 窗口 ''''''
# 元素如果是灰色的,说明当前元素在界面中是不可见的,也是不可点击的 #需要进行一些操作,才能将元素显示出来 # 弹出型的警告窗口:用前端工具是定位不到的,可以使用swicth_to_alert()处理 # text 返回alert/confirm/prompt中的文字信息 # accept 点击确认按钮 # dismiss 点击取消按钮,如果有的话 # send_keys 输入值,这个alert/confirm没有对话框就不能用了,不然会报错 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') #鼠标悬停至设置、 link = driver.find_element_by_link_text('设置') ActionChains(driver).move_to_element(link).perform() #打开搜索设置 driver.find_element_by_link_text('搜索设置').click() time.sleep(2) #保存设置 driver.find_element_by_class_name('prefpanelgo').click() time.sleep(2) #接受警告窗 driver.switch_to_alert().accept() time.sleep(2) driver.quit()
#文件上传
from selenium import webdriver from time import sleep,ctime driver = webdriver.Chrome() driver.get('http://192.168.1.109:8090/') driver.maximize_window() driver.implicitly_wait(10) #登入系统 driver.find_element_by_id('username').send_keys('****') driver.find_element_by_id('password').send_keys('*****') driver.find_element_by_id('signin').click() sleep(2) driver.find_element_by_xpath('/html/body/div[5]/div[1]/div[2]/a').click() sleep(1) driver.find_element_by_id('d86cdf62-6438-4ff4-bc3a-88523f567333').click() driver.switch_to.frame('iframe-center') sleep(1) driver.find_element_by_id('btnImport').click() sleep(1) #定位上传按钮,添加本地文件
#send_keys实现上传文件
#如下为type="file" 即为上次文件的类型 #<input id="FileData" name="FileData" type="file" value="请选择文件"> driver.find_element_by_id('FileData').send_keys(r'E:\test01.xlsx')

# 调用exe程序 import os # 调用upfile.exe程序 os.system('D:\\upfile.exe')
07视频:
# 获得cookie信息
cookie = driver.get_cookies()
#返回字典的key为“name”的cookie信息
driver.get_cookie(name)
#添加cookie,为指定对象,必须有name和value值
driver.add_cookie({'name':'keyaaa','value':'valuebbb'})
#删除cookie信息
driver.delete_cookie()
#删除所有cookie信息
driver.delete_all_cookies()
driver.find_element_by_id('password').send_keys('123456') driver.find_element_by_id('signin').click() sleep(2) driver.find_element_by_xpath('/html/body/div[5]/div[1]/div[2]/a').click() sleep(1) # 获得cookie信息 cookie = driver.get_cookies() print(cookie) sleep(2)
打印cookies:
[{'value': '5B9920D103A9A51ED9C73962AD4D74F34740DAFCDC6CE40D39DB4A16B6B11D09172E67CC984AEEA0C38A05E8623A280DDB65AC62F34253974DE106076B1291ECB4CBA128CB30F485932203A933823BE202FFFB05E4F168AE24B7049C65ED1BB4', 'secure': False, 'path': '/', 'expiry': 1565081404.022075, 'name': 'JSST.AUTH', 'httpOnly': True, 'domain': '192.168.1.109'}, {'secure': False, 'path': '/', 'value': 'amze0jjwac0zhdhhihnd40u2', 'name': 'ASP.NET_SessionId', 'httpOnly': True, 'domain': '192.168.1.109'}]
# 截取当前窗口,并指定截图图片保存位置 driver.get_screenshot_as_file(r'E:\test\TJ01.jpg ')
08视频:
09视频:
模块化
10视频:
selenium IDE
11视频:
unittest



浙公网安备 33010602011771号