• 七、JS操作/窗口滚动/文件上传/项目分析


    一、JS操作

    selenium没有封装修改页面属性的方法,只能获取属性(get_attribute),没有set_attribute

    发送js代码

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("http://www.baidu.com")
    # 获取属性
    e = driver.find_element_by_id("kw")
    name = e.get_attribute("name")
    print(name)
    # 设置属性
    def set_attribute():
        '''设置e的属性 e.value = '柠檬班'
           传入js代码
        e = document.getElementById("kw")
        e.name = "柠檬班"
        '''
        js_code = """
        e = document.getElementById("kw");
        e.name = "柠檬班";
        """
        driver.execute_script(js_code)

    举例:修改12306选票日期

     

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://www.12306.cn/index/")
    # 使用强制等待
    time.sleep(5)
    # 发送js代码给浏览器
    js_code = """
    e = document.getElementById("train_date");
    e.readOnly = false;
    e.value = "2020-07-22";
    """
    driver.execute_script(js_code)
    time.sleep(10)
    driver.quit()

    参数化---在JS中混入Python对象

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://www.12306.cn/index/")
    # 使用强制等待
    time.sleep(5)
    
    #使用python定位到元素,python对象e
    e = driver.find_element_by_id("train_date")
    
    # arguments[0]相当于python中的format,占坑符。
    # arguments[0]表示execute_script函数中传的第一个参数e
    js_code = 'arguments[0].readOnly = false;'
    driver.execute_script(js_code,e)
    time.sleep(1)
    
    js_code = 'arguments[0].value = "2020-07-22";'
    driver.execute_script(js_code,e)
    time.sleep(10)
    driver.quit()

    二、窗口滚动

    元素滑动到可见范围内

    import time
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://www.12306.cn/index/")
    # 先定位 常见问题
    questions_elem = driver.find_element_by_link_text("常见问题")
    # 把常见问题的元素滑动到可见范围内
    questions_elem.location_once_scrolled_into_view
    time.sleep(3)
    questions_elem.click()

    滑动到页面最底部

    import time
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://www.readhub.cn/topics")
    # 滑动到页面最底部,滑动3次
    for i in range(3):
    js_code = 'window.scrollTo(0,document.body.scrollHeight);'
    driver.execute_script(js_code)
    三、文件上传
    上传文件html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
            附件: <input type="file" name="mfile">
    </body>
    </html>
    import time
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("http://localhost:63342/workspace/Lemon/iframe.html?_ijt=6r1e63dp651r4vpi6sc968n4e4")
    # 上传文件
    elem = driver.find_element_by_name("mfile")
    # 输入文件路径 ,上传文件时input元素 # send_keys 1:输入文本 2:输入键盘位置 3:发送文件 elem.send_keys("E:demo.txt") time.sleep(3) driver.quit()

    有的时候上传文件不是input元素,可能是其他的元素或组件

    需要使用桌面操作 

    pywin32(这个比较复杂,一般不用,不做详细介绍)

    pywinauto (适用于Windows系统)

    • 安装 pip install pywinauto 

    • 浏览器页面操作:定位到组件-----点击上传文件(弹出window的文件选择窗口)

    • 初始化一个desktop()对象----->查询[""]弹框窗口名------>编辑输入查询的文件----->点击确认 

    from pywinauto import Desktop
    
    app = Desktop()
    #根据名字找到弹出的窗口
    dialog = app["打开"]
    
    #在输入框中输入值
    dialog["Edit"].type_keys(r"E:	est_file.txt")  #这里要使用原始字符串,否则	会转移成tab,文件名出错
    
    #点击
    dialog["Button"].click()

    pywingui (跨平台)

    import pyautogui
    
    pyautogui.write(r"e:	est_file.txt") #这里只能是小写,且不能是中文
    pyautogui.press("enter",presses=2)#按2次enter键
    time.sleep(2)

    四、项目分析

     

     

  • 相关阅读:
    Linux学习-网络管理
    Linux学习-文件权限
    Linux学习-用户管理常用命令
    python操作数据库(MySQL、redis、MD5加密函数)
    Jenkins待过的坑
    Robot framework+Jenkins
    jenkins + maven + SVN自动化集成部署
    接口测试学习笔记二
    接口测试学习笔记一
    【数据结构】为什么要使用一致性哈希算法?
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13800013.html
Copyright © 2020-2023  润新知