zoukankan      html  css  js  c++  java
  • 处理常见的自动化场景

    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信息

     

  • 相关阅读:
    Python while循环实现重试
    VBA find查找行号和列号的方法
    通过selenium控制浏览器滚动条
    【转】自然语言处理P,R,F值的计算公式
    【转】ultraedit 正则表达式
    【转】java文件输出流,写到.txt文件,如何实现换行
    Java heap space 解决方法
    XML+RDF——实现Web数据基于语义的描述(转载)
    java学习笔记——jsp简单方法读取txt文本数据
    一个完全独立的今天
  • 原文地址:https://www.cnblogs.com/lvhuayan/p/14455974.html
Copyright © 2011-2022 走看看