zoukankan      html  css  js  c++  java
  • selenium(2)-selenium针对浏览器的操作有哪些

    对浏览器有哪些操作

    • 最大化、最小化浏览器
    • 控制、获取浏览器大小
    • 获取当前标签页title、url
    • 前进、后退、刷新
    • 执行js语句
    • 打开、关闭,切换新标签页
    • 滚动页面
    • 上传附件
    • 鼠标悬停
    • 对话框的定位方式
    • 选择框的操作
    • 其他一些操作

    最大化最小化浏览器

     1 from time import sleep
     2 from selenium import webdriver
     3 
     4 # 加载浏览器驱动
     5 driver = webdriver.Chrome("../resources/chromedriver.exe")
     6 
     7 # 访问网址
     8 driver.get("https://www.baidu.com")
     9 
    10 # 最大化浏览器
    11 driver.maximize_window()
    12 
    13 sleep(2)
    14 
    15 # 最小化浏览器
    16 driver.minimize_window()

    控制获取浏览器大小

    # 加载浏览器驱动
    driver = webdriver.Chrome("../resources/chromedriver.exe")
    
    # 访问网址
    driver.get("https://www.baidu.com")
    
    # 获取浏览器大小
    size = driver.get_window_size()
    print(f"浏览器大小:{size}")
    
    sleep(2)
    
    # 设置浏览器大小
    driver.set_window_size(1200, 1000)

    结果执行

    浏览器大小:{'width': 1936, 'height': 1056}

    小结:get_window_size() 返回的是字典

    获取当前标签页url  , title 

    # 加载浏览器驱动
    driver = webdriver.Chrome("../resources/chromedriver.exe")
    
    # 访问网址
    driver.get("https://www.baidu.com")
    
    # 获取当前标签页的title
    print(f"标签页title:{driver.title}")
    
    # 获取当前标签页的url
    print(f"标签页url:{driver.current_url}")
    
    # 获取当前浏览器的名称(不常用)
    print(f"标签页name:{driver.name}")
    
    # 获取当前页面完整的HTML代码
     print(f"标签页page_source:{driver.page_source}")

    结果执行

    标签页title:百度一下,你就知道
    标签页url:https://www.baidu.com/
    标签页name:chrome
    标签页page_source:<html><head>...</head></html>

    前进,后退,刷新

    1 # 前进
    2 driver.forward()
    3 
    4 # 后退
    5 driver.back()
    6 
    7 # 刷新
    8 driver.refresh()

    执行js语句

    # 同步执行js
    js='console.log(2)'
    driver.execute_script(js)
    
    # 异步执行js
    driver.execute_async_script("alert(2)")

    关闭,打开,切换新标签页

     1 # 打开新的标签页
     2 js = 'window.open("https://www.baidu.com/")'
     3 driver.execute_script(js)
     4 
     5 # 获取当前标签页句柄
     6 print(driver.current_window_handle)
     7 
     8 # 获取浏览器所有标签页句柄
     9 handles = driver.window_handles
    10 print(handles)
    11 
    12 # 切换标签页
    13 driver.switch_to.window(handles[-1])
    14 
    15 # 关闭当前标签页
    16 driver.close()

    知识小结:

    • 打开新的标签页只能通过 js 来操作
    • 可以根据标签页的句柄来切换标签页
    • 操作标签页的好处就是,可以只打开一个浏览器但可以访问多个不同的网页;这在后续集成单元测试框架(unittest、pytest)的时候会有很大的帮助

    滚动页面(三种方法)

    # 滚动随机高度(100-999的随机高度)
    js = "var q=document.documentElement.scrollTop=" + random.randint(100, 999)
    driver.execute_script(js)
    2 滚动条手动到指定的位置,这种方法更常用
    target = driver.find_element_by_id("id_keypair")
    driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
    1 3  发送tab键        
    2 from selenium.webdriver.common.keys import Keys
    3 driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)

    上传附件

    1 文件上传需要安装pypiwin32
    2 pip install pypiwin32 
    3 
    4 
    5 import win32com.client
    6 shell = win32com.client.Dispatch('wScript.shell')
    7 shell.Sendkeys(r"d:	img.jpg")

    鼠标悬停

     1 # 导入selenium
     2 from selenium import webdriver
     3 driver = webdriver.Chrome()
     4 # selenium中的actionchains的方法
     5 from selenium.webdriver.common.action_chains import ActionChains
     6 driver.get('URL')
     7 driver.maximize_window()
     8 # 识别需要悬停的元素  
     9 ele = driver.find_element_by_link_text('广微数据')
    10 # 鼠标移到悬停元素上  
    11 ActionChains(driver).move_to_element(ele).perform()

    对话框的操作方式

    有三种类型的对话框 alert,confirm,prompt

    alert-浏览器原生对话框定位方式

    1 浏览器原生对话框操作方法
    2 driver.switch_to.alert.accept()           点击OK
    3 driver.switch_to.alert.text          得到对话框内容
    4 driver.switch_to.alert.dismiss()      点击cancel
    5 driver.switch_to.alert.send_keys()     输入内容

    confirm,prompt   HTML元素对话框使用xpath,css定位

    选择框的操作

    单选框的操作

    • 单选框,一般默认选中其中1个
    • 点击选择时,有且只能选中1个,所以再操作时,无须判断是否存在默认值
    • 举例,选择女性
      driver.find_element_by_css_selector('input[value="female"]').click()

    多选框的操作

    •  如果选择某一项,点击该项,会取消选中
    • 如果该项未选中,点击该项,会被选中
    • 查看上述截图,我们会发现默认选中的会存在1个 checked的属性
    1 将默认选中的点选,即取消选中
    2 driver.find_element_by_xpath('//*[@name="course"][@checked]').click()
    3 然后勾选我们想要的元素
    4 
    5 driver.find_element_by_css_selector('input[value=python]').click()
    6 driver.find_element_by_css_selector('input[value=selenium]').click()

    复选框的操作

     点击该项,即可选中

    已选中的再次点击,不会取消选中

    按住键盘CTRL键可实现多选

    • 若实现对复选框的操作,需要导入Select类:from selenium.webdriver.support.ui import Select
    from selenium import webdriver
    # 导入 Select
    from selenium.webdriver.support.ui import Select
    
    driver = webdriver.Chrome()
    
    # 打开网址;地址需要修改
    driver.get('http://xxxxx:9000/zentao')
    
    
    # 获得相应的WebElement
    select = Select(driver.find_element_by_id("select"))
    
    # 先取消选择所有的选项
    select.deselect_all()
    
    
    # 通过文本选中 玛莎拉蒂
    select.select_by_visible_text("玛莎拉蒂")
    
    # 通过 value 值选中 兰博基尼
    select.select_by_value("Lamborghini")
    
    # 通过 index 选择元素,索引从0开始
    select.select_by_index(2)
    
    driver.quit()

    下拉框 

     1 from time import sleep
     2 
     3 from selenium.webdriver.support.select import Select
     4 from selenium import webdriver
     5 
     6 driver = webdriver.Chrome("../resources/chromedriver.exe")
     7 
     8 # 将html文件更改为自己的路径
     9 driver.get("file:///C:/下拉框.html")
    10 driver.maximize_window()
    11 
    12 # 找到select标签元素
    13 pro = Select(driver.find_element_by_id("pro"))
    14 
    15 # 返回所有选项
    16 for option in pro.options:
    17     print(option.text)
    18 
    19 # 返回所有被选中的选项
    20 for option in pro.all_selected_options:
    21     print(option.text)
    22 
    23 # 通过value选中
    24 pro.select_by_value("bj")
    25 sleep(1)
    26 
    27 # 通过index选中
    28 pro.select_by_index(1)
    29 sleep(1)
    30 
    31 # 通过标签文本选中
    32 pro.select_by_visible_text("广东"

    其他一些操作

     1 perform(self):        ---执行链中的所有动作
     2 reset_actions(self):     ---清除存储在远端的动作
     3 click(self, on_element=None):   ---鼠标左键单击
     4 click_and_hold(self, on_element=None):    --鼠标左键单击,不松开
     5 context_click(self, on_element=None):       ---鼠标右键单击
     6 double_click(self, on_element=None):        ---鼠标左键双击
     7 drag_and_drop(self, source, target):        ---拖拽到某个元素后松开
     8 drag_and_drop_by_offset(self, source, xoffset, yoffset):        ---拖拽到某个坐标后松开
     9 key_down(self, value, element=None):        ---某个键盘键被按下
    10 key_up(self, value, element=None):          ---松开某个键
    11 move_by_offset(self, xoffset, yoffset):     ---鼠标移动到某个坐标
    12 move_to_element(self, to_element):          ---鼠标移动到某个元素
    13 move_to_element_with_offset(self, to_element, xoffset, yoffset):        ---移动到距某个元素(左上角)多少的位置
    14 release(self, on_element=None):     ---在某元素上松开鼠标
    15 send_keys(self, *keys_to_send):     ---发送某些值到当前焦点元素
    16 send_keys_to_element(self, element, *keys_to_send):     ---发送某些值到指定元素

     举例:ActionChains(driver).click(clk_btn).context_click(right_btn).perform()

    right_click = driver.find_element_by_xpath('//a[@name="tj_trnews"]')

    ActionChains(driver).context_click(right_click).perform()

  • 相关阅读:
    Linux查看日志常用命令
    linux(centos)下安装PHP的PDO扩展
    TP thinkphp 权限管理 权限认证 功能
    mysql优化(三)–explain分析sql语句执行效率
    阿里云服务器Centos7成为挖矿肉鸡被挖矿imWBR1耗尽CPU
    Asp.net导入Excel并读取数据
    定义显式类型转换和隐式类型转换
    C# 对象与引用变量
    C# ref参数
    C# 字段与属性的区别
  • 原文地址:https://www.cnblogs.com/xinhua19/p/13153586.html
Copyright © 2011-2022 走看看