首页 > 其他 > 详细

处理常见的自动化场景

时间:2021-02-28 00:19:34      阅读:18      评论:0      收藏:0      [点我收藏+]

1、定位frame中的对象:

在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B。switch_to_frame方法可以把当前定位的主题切换到frame里,在frame里实际是嵌套了另外一个页面,而webdriver每次只能在一个页面识别,所以需要用switch_to_frame方法去获取frame中嵌套的页面。

driver.switch_to.frame("frame1")#移动到id为frame1的frame上
driver.switch_to.default_content()#将识别的主体切换出frame
# switch_to.frame的参数必须是id或者是name,所以一个frame只要有id和name处理起来很容易。如果没有的话,两种解决思路:
# 1、让开发加上id或者name
# 2、使用xpath等方式定位然后实现跳转

2、alert/confirm/prompt处理: 

使用switchTo.alert()方法定位到当前的 alert/confirm/prompt,然后在调用Alert 的方法进行操作,Alert提供了以下几个方法:

text : 返回alert/confirm/prompt中的文字内容
accept : 点击确认按钮
dismiss : 点击取消按钮如果有取消按钮的话
sendKeys : 向prompt中输入文字

技术分享图片

 

 

 

#alert对话框
driver.find_element(By.XPATH,//input[@name="alterbutton"]).click()
alert=driver.switch_to.alert #切换到js弹窗
value=alert.text#取出alert的值
print(value)
alert.accept()#点击确定

技术分享图片

 

 

 技术分享图片

#promptbutton对话框
driver.find_element(By.XPATH,//input[@name="promptbutton"]).click()
driver.switch_to.alert.send_keys("百度一下")
driver.switch_to.alert.accept()

技术分享图片

 

技术分享图片

#confirm对话框
driver.find_element(By.XPATH,//input[@name="confirmbutton"]).click()
driver.switch_to.alert.dismiss()#点击取消
value=driver.switch_to.alert.text
print(value)
driver.switch_to.alert.accept()

3、下拉框处理:

 

 

web页面上经常会有下拉框,对下拉框的处理比较简单,一般分为两种情况:
(1)下拉框通过元素定位识别

driver.find_element(By.XPATH,//option[@value="orange"]).click()

 

技术分享图片

 

 

(2)创建一个Select的对象,然后通过相应方法处理

 

from selenium.webdriver.support.select import Select
element
=driver.find_element(By.XPATH,//select[@id="Selector"]) select_el=Select(element) select_el.select_by_value(grape)#value属性的值 time.sleep(1) select_el.select_by_visible_text("香蕉")#可见文本内容 time.sleep(1) select_el.select_by_index(1) #索引定位,索引从0开始

 

4、调用javascript

当webdriver遇到无法完成的操作时候,这个时候可以使用javascript来完成,webdriver提供了execute_script()接口来调用js代码。

执行js有两种场景:一种是在页面上直接执行js、另一种是在某个已经定位的元素上执行js

 

driver.execute_script(alert(“hello!!”); ) #弹出窗口
#加边框 用途:判断元素是否识别到
element=driver.find_element(By.XPATH,//input[@name="attach[]"])
js_str2=arguments[0].style.border="5px solid red"
driver.execute_script(js_str2,element)
#浏览器滚动条滚动 js与浏览器兼容
#举例:浏览器上下滚动
js_str3=document.body.scrollTop=%d;
for i in range(9):
    time.sleep(2)
    if i%2==0:
        driver.execute_script(js_str3%5000)
    else:
        driver.execute_script(js_str3%-5000)
#移除元素的value属性
element1=driver.find_element(By.XPATH,//input[@id="showSelectResult"])
js_str4=arguments[0].removeAttribute("value");
driver.execute_script(js_str4,element1)
#设置元素的value属性
element2=driver.find_element(By.XPATH,//input[@id="showSelectResult"])
js_str5=arguments[0].setAttribute("value","resetvalue");
driver.execute_script(js_str5,element2)
# 识别并获取对象属性
driver.get(http://www.baidu.com)
js_str6 = var user_input = document.getElementById("su").getAttribute("value");return user_input;
value=driver.execute_script(js_str6)
print(value)

5、浏览器多窗口处理

我们在测试一个web应用的时候有时候会出现多个浏览器窗口的情况,webdriver提供了相应的解决方案,如下:

首先要获得每一个窗口的唯一标识符号(句柄),通过获得的句柄来区分不同的窗口,从而对不同窗口上的元素进行操作。

技术分享图片

 

 

def switch_window_by_title(title):
    for handle in driver.window_handles:
        driver.switch_to.window(handle)
        if driver.title.__contains__(title):
            break

def switch_window_by_url(url):
    for handle in driver.window_handles:#获取所有窗口的句柄
        driver.switch_to.window(handle)#通过句柄跳转窗口
        if driver.title.__contains__(url):
            break

e=driver.find_element(By.XPATH,//select[@id="jumpMenu"])
select_e=Select(e)
select_e.select_by_visible_text(开封教育网)
# switch_window_by_title(‘开封教育网‘)
switch_window_by_url(http://jtj.kaifeng.gov.cn/)
driver.find_element(By.XPATH,//a[text()="政务服务"]).click()

6、cookie 处理:

假如我们需要验证浏览器中是否存在cookie,因为基于真实的cookie是无法通过白盒和集成测试完成的,webdriver可以读取、添加和删除cookie信息

webdriver操作cookie的方法如下:
get_cookies() 获取所有cookie信息
get_cookie(name) 返回特定name有cookie信息
add_cookie(cookie_dict) 添加cookie,必须有name和value值
delete_cookie(name) 删除特定部分的cookie信息
delete_all_cookies() 删除所有cookie信息

 

 

 

处理常见的自动化场景

原文:https://www.cnblogs.com/lvhuayan/p/14455974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!