自动化测试python+selenium相关技术_Python+selenium自动化测试元素操作

#########################

需要掌握两类1,元素的操作2,浏览器的操作

###############################

元素的常用操作方法1,clear() 清空2,sendkeys() 输入值,需要有参数,3,click() 点击

#############################

浏览器的常用操作

1,driver.maximize_window() 最大化窗口,一定要记住,

2,driver.set_window_size(100,100) 设置窗口大小

3,driver.set_window_position(100,200) 设置窗口位置,

4,back()

5,forward()

6,refresh()

7,close() 关闭单个窗口,

8,quit() 关闭所有的窗口,

#################################

学习webdriver的其他方法

1,获取元素的大小

2,获取元素的文本,这是非常重要的,往往是一个是否登陆成功的验证条件,

3,获取元素的属性值

4,判断元素是否为可见状态,

1,size 获取元素的大小,这是后面没有括号的,需要定位元素

2,text, 获取元素的文本,需要定位元素, 这是后面没有括号的,

3,title 获取页面的title 这就是预期的你进入页面的结果,不需要定位元素,没有括号,

4,current_url 获取当前的url,没有括号,

5,get_attribute('XXX') 获取属性的值,XXX要获取的属性, 比如获取一个超链接的url地址,href,

6,is_display() 判断元素是否可见,

7,is_enabled() 判断元素是否可用,比如一个按钮是否可以点击,或者你要点击同意之后才可用, 都是常用的场景,

##################################

webdriver的鼠标和键盘操作,这个了解,不常用,鼠标有一个常用的就是悬停,

1,context_click() 右击,但是你是不能选择弹出的菜单的,

2,double_click() 双击

3,drag_and_drop() 拖拽

4,move_to_element() 悬停

5,perform() 此方法用来执行上面的所有的方法

这是导入包,from selenium.webdriver.common.action_chains import ActionChains

实例化actionchains对象,action = ActionChains(driver)

调用右击方法,ac = action.context_click(element) 这个username是说在哪里进行右击,传递的是已经定位好的元素,element

执行 ac.perform()

可以写成一句:ActionChains(driver).context_click(element).perform()

悬停也是一样的,悬停之后会有效果,

######################################

鼠标拖拽需要单独说一下

1,首先要定义两个元素,source target

2,drag_and_drop(source,target) 这是传递两个地址,

3,drag_and_drop(source,500,0 )   这是拖拽500个像素,

####################################

键盘操作,模拟键盘上面的组合操作,比如ctrl+c ctrl+v

导入包,from selenium.webdriver.common.keys import Keys

1,sendkeys(keys.BACK_SPACE)   删除键

2,sendkeys(keys.SPACE) 空格

3,sendkeys(keys.TAB)

4,sendkeys(keys.ESCAPE)

5,sendkeys(keys.ENTER)

6,sendkeys(keys.CONTROL,'a')

7,sendkeys(keys.CONTROL,'c')

#######################################

元素等待:1,元素等待,这是非常重要的, 如果在加载是操作不到的,所以要等待加载完,然后才做, 这种有显示等待,隐式等待

2,不设置等待会报出异常,因为找不到元素, 和网速有关系,

显式等待, 这种方法比较复杂,不常用,我们常用的是隐式等待,我们工作中也是使用隐式等待,

1,导包

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import  expected_conditions as EC

2,ctrl+alt+空格,导入包

ctrl+p 提示参数

#######################################

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.action_chains importActionChainsfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom time importsleep#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")

element= (By.CSS_SELECTOR,'#kw')

WebDriverWait(driver,10).until(EC.presence_of_element_located(element)).send_keys('admin')

sleep(2)

driver.quit()

可以分开写:

driver=webdriver.Firefox()

driver.get("https://www.baidu.com")

element= (By.CSS_SELECTOR,'#kw')

wait= WebDriverWait(driver,10)

element=wait.until(EC.presence_of_element_located(element))

element.send_keys('admin')

sleep(2)

driver.quit()

如果找不到元素,会报出一个异常,

######################################

隐式等待1,作用于全部的元素,显示等待是作用于一个元素的,#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")

driver.implicitly_wait(10) #这里设置10秒,工作中一般设置30秒,

element = driver.find_elements_by_css_selector('#kw').send_keys('123')

sleep(2)

driver.quit()

所以我们在写的时候,打开页面,

先写最大化窗口

之后就是写隐式等待,

#################################

下拉框,警告框,滚动条的操作

掌握调用js的方法

###############################

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.action_chains importActionChainsfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom time importsleep#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#select的操作#第一种方式 tag_name 定位

tags = driver.find_elements_by_tag_name('option')for tag intags:if tag.get_attribute('value') == 'sh':

tag.click()if tag.text =='重庆':

tag.click()#这种方式,不能切换,因为for循环是从上往下的,

#第二种方式 css 定位

driver.find_elements_by_css_selector('[value = "sh"]').click()

driver.find_elements_by_css_selector('[value = "cq"]').click()

driver.find_elements_by_css_selector('[value = "bj"]').click()#这种方式如果有300个城市怎么办?

#第三种方法 select 这是专门用来select标签诞生的,#有三种方法:#select_by_index()#select_by_value()#select_by_visible_value()#记住这三种方法是直接就选中了,不需要再去点击了,

from selenium.webdriver.support.select importSelect

selectEle= driver.find_elements_by_css_selector('select')

select=Select(selectEle)

select.select_by_index(1)

select.select_by_index(2)

select.select_by_index(3)

select.select_by_value('sh')

select.select_by_value('bj')

select.select_by_visible_text('上海')

sleep(2)

driver.quit()

########################################

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.action_chains importActionChainsfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom time importsleep#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#警告框#text 获取文本, 这是没有括号的,#accept() 确定#dismiss() 取消

#想要使用这三种方法,要先获取这个警告框,#alertEle = driver.find_elements_by_css_selector('#alert') #定位警告框

alertEle.click() #点击

alert = driver.switch_to.alert #切换到警告框上,#然后就可以使用这三个方法了,

text = alert.text #需要一个变量接收

print(text)

alert.accept()

alert.dismiss()#取消和确定,不能同时使用的,

sleep(2)

driver.quit()

#######################################

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.common.action_chains importActionChainsfrom selenium.webdriver.common.keys importKeysfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECfrom time importsleep#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#滚动条的操作#提供了js脚本调用方法,所以可以js控制滚动条

#最底层#js1 = "window.scrollTo(0,1000)" # window是窗口句柄,scroll这是滚动条的意思,第一个0是距离最左侧0, 第二个是距离最顶部1000#最顶层#js1 = "window.scrollTo(0,0)"#执行#driver.execute_script(js1)

js1= "window.scrollTo(0,1000)"driver.execute_script(js1)

sleep(2)

driver.quit()

########################################

frame表单的切换:

#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#frame表单的切换:#1,页面里面有套了页面,你需要切换进入frame才可以操作里面的元素,#2,frame是引用了另一个页面,

#方法:#driver.switch_to.frame('frame_name') # 里面是frame的name#driver.switch_to.default_content() # 恢复到默认页面,

driver.switch_to.frame('name')

driver.switch_to.default_content()

sleep(2)

driver.quit()

###################################

窗口的切换和截图

#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#截图保存,一般配合断言的使用

#多窗口切换#提供了三种方法#current = driver.current_window_handle # 获取当前窗口的句柄#handle = driver.window_handles # 获取所有的窗口的句柄#driver.switch_to.window(handle) # 切换到指定句柄

current=driver.current_window_handle

driver.find_element_by_link_text('百度').click()for hanle indriver.window_handles:if hanle !=current:

driver.switch_to.window(hanle)#下面就是操作

driver.find_elements_by_css_selector('#id').send_keys('123')#截图

driver.get_screenshot_as_file('../img/123.png') #括号里面是保存路径

sleep(2)

driver.quit()

##################################

#验证码#处理方法#测试环境,去掉验证码#生产环境,设置万能验证码,#验证码识别技术,很难达到100%,验证码种类繁多啊,#记录cookie,记录cookie进行登陆,推荐,这个方法主要进行讲解,

##################################

cookie

用户登陆之后,服务器一般都会设置cookie,保存在浏览器,

你再去请求的时候,服务器校验cookie,有的话就不需要在去登陆了,实现了长连接,否则每次都要登陆

所以你可以先登陆,然后使用自动化脚本的时候,把cookie带上, 然后服务器就不要让你再登陆了,所以你都成功登陆了,你就不需要考虑验证码了

这就是绕过了验证码

方法:

get_cookie(name) name是键名,获取指定的cookie

get_cookie() 获取本网站本地所有cookie

add_cookie(str) 添加cookie, str要是字典格式的, str = {"id":"userid","name":"usename"}

########################################

获取百度的所有的cookie

from selenium importwebdriverfrom time importsleepimportjson#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#程序打开网页后20秒内手动登陆账户

sleep(20)

with open('cookies.txt','w') as cookief:#将cookies保存为json格式

cookief.write(json.dumps(driver.get_cookies()))

sleep(2)

driver.quit()

##########################################

把所有的cookie都设置到浏览器中,然后刷新页面就发现百度登陆了,

from selenium importwebdriverfrom time importsleepimportjson#实例化浏览器

driver =webdriver.Firefox()

driver.get("https://www.baidu.com")#首先清除由于浏览器打开已有的cookies

driver.delete_all_cookies()defgetPureDomainCookies(cookies):

domain2cookie={} #做一个域到cookie的映射

for cookie incookies:

domain=cookie['domain']if domain indomain2cookie:

domain2cookie[domain].append(cookie)else:

domain2cookie[domain]=[]

maxCnt=0

ansDomain=''

for domain indomain2cookie.keys():

cnt=len(domain2cookie[domain])if cnt >maxCnt:

maxCnt=cnt

ansDomain=domain

ansCookies=domain2cookie[ansDomain]returnansCookies

with open('cookies.txt','r') as cookief:#使用json读取cookies 注意读取的是文件 所以用load而不是loads

cookieslist =json.load(cookief)

cookieslist=getPureDomainCookies(cookieslist)#方法1 将expiry类型变为int

for cookie incookieslist:#并不是所有cookie都含有expiry 所以要用dict的get方法来获取

if isinstance(cookie.get('expiry'), float):

cookie['expiry'] = int(cookie['expiry'])

driver.add_cookie(cookie)#方法2删除该字段

#for cookie in cookieslist:

##该字段有问题所以删除就可以 浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下

#if 'expiry' in cookie:

#del cookie['expiry']

#driver.add_cookie(cookie)

driver.refresh()

sleep(10)

driver.quit()

##############################################

###################################

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值