zoukankan      html  css  js  c++  java
  • Selenium+Python3的web自动化测试(四)

    本文章内容参考了白夜黑羽教python的教程,出处为http://www.python3.vip/doc/tutorial/selenium/01/

    感谢上方大佬!

    所整理的正文如下:

    首先,在搭建好Selenium+Python3的环境基础上,测试要点如下:

    1.捕捉鼠标移动到元素上才显示的内容信息,如百度首页的右上角,有个 更多产品 选项,如下图所示

     鼠标移动到元素上会显示隐藏的内容,完成这步的操作如下

     1 #selenium提供的ActionChains类包含了许多鼠标操作如右键点击,双击,移动到某元素,拖拽等
     2 
     3 from selenium import webdriver
     4 from selenium.webdriver.common.action_chains import ActionChains
     5 
     6 driver = webdriver.Firefox()
     7 driver.implicitly_wait(0.5)
     8 
     9 driver.get('https://www.baidu.com/')
    10 
    11 ac = ActionChains(driver)
    12 
    13 # 鼠标移动到 元素上
    14 ac.move_to_element(driver.find_element_by_css_selector('[name="tj_briicon"]')).perform()

    但当鼠标移开时,这个栏就消失了,无法定位栏内的元素的属性,解决的方法是

    在页面按下F12之后,在console(或者是控制台)里执行如下JS代码,回车执行(或者是ctrl+回车),5s倒计时内立即将鼠标移到“更多产品”位置,5s后,界面会被冻结,然后此时就可以在开发者工具中找到隐藏内容的属性信息了

     1 #窗口冻结代码,即debugger命令 

     2 setTimeout(function(){debugger},5000) 

    2.对页面内弹窗内容的操作(测试网页http://f.python3.vip/webauto/test4.html

    • 弹出的对话框有三种类型,分别是 Alert(警告信息)、confirm(确认信息)和prompt(提示输入)(注意:如果不去点击它,页面的其它元素是不能操作的。)
    • Alert 弹出框,目的就是显示通知信息,只需用户看完信息后,点击 OK(确定) 就可以了。
    • Confirm弹出框,主要是让用户确认是否要进行某个操作。
    • Prompt 弹出框 ,是需要用户输入一些信息,提交上去。
     1 """Alert的操作"""
     2 from selenium import webdriver
     3 driver = webdriver.Firefox()
     4 driver.implicitly_wait(0.5)
     5 driver.get('http://f.python3.vip/webauto/test4.html')
     6 
     7 # --- 点击使alert出现 ---
     8 driver.find_element_by_id('b1').click()
     9 
    10 # 打印 弹出框 提示信息
    11 print(driver.switch_to.alert.text) 
    12 
    13 # 点击 OK 按钮
    14 driver.switch_to.alert.accept()
     1 """Confirm的操作""""
     2 # --- 点击使onfirm出现 ---
     3 driver.find_element_by_id('b2').click()
     4 
     5 # 打印 弹出框 提示信息
     6 print(driver.switch_to.alert.text)
     7 
     8 # 点击 OK 按钮 
     9 driver.switch_to.alert.accept()
    10 
    11 driver.find_element_by_id('b2').click()
    12 # 点击 取消 按钮
    13 driver.switch_to.alert.dismiss()
     1 """Prompt的操作"""
     2 # --- 点击使prompt出现 ---
     3 driver.find_element_by_id('b3').click()
     4 
     5 # 获取 alert 对象
     6 alert = driver.switch_to.alert
     7 
     8 # 打印 弹出框 提示信息
     9 print(alert.text)
    10 
    11 # 输入信息,并且点击 OK 按钮 提交
    12 alert.send_keys('web自动化 - selenium')
    13 alert.accept()
    14 
    15 # 点击 Cancel 按钮 取消
    16 driver.find_element_by_id('b3').click()
    17 alert = driver.switch_to.alert
    18 alert.dismiss()

    注意 : 有些弹窗并非浏览器的alert 窗口,而是html元素,对这种情况的处理可以参照对内嵌html的处理

    3.改变窗口大小,获取窗口标题、url地址

    from selenium import  webdriver
    
    driver = webdriver.Firefox()
    driver.implicitly_wait(0.5)
    
    # 打开网站
    driver.get('https://www.cnblogs.com/')
    
    # 获取网站标题栏文本
    print(driver.title) 
    
    # 获取网站地址栏文本
    print(driver.current_url) 
    
    #获取窗口大小(单位是像素px)
    print(driver.get_window_size())
    
    #改变窗口大小(两个参数分别是width和height)
    driver.set_window_size(648, 975)

    4.截屏

     1 from selenium import  webdriver
     2 
     3 driver = webdriver.Firefox()
     4 driver.implicitly_wait(0.5)
     5 
     6 # 打开百度网站
     7 driver.get('https://www.baidu.com/')
     8 
     9 # 截屏保存为图片文件(图片保存路径是桌面)
    10 driver.get_screenshot_as_file('1.png')

    5.手机模式

     1 from selenium import webdriver
     2 
     3 mobile_emulation = { "deviceName": "Nexus 5" }
     4 
     5 chrome_options = webdriver.ChromeOptions()
     6 
     7 chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
     8 
     9 driver = webdriver.Chrome( desired_capabilities = chrome_options.to_capabilities())
    10 
    11 driver.get('http://www.baidu.com')
    12 
    13 input()
    14 driver.quit()

    6.上传文件(例如上传图片)

     1 from selenium import  webdriver
     2 
     3 wd = webdriver.Firefox()
     4 wd.implicitly_wait(0.5)
     5 
     6 # 打开网站
     7 wd.get('https://tinypng.com/')
     8 
     9 # 先定位到上传文件的 input 元素
    10 ele = wd.find_element_by_css_selector('input[type=file]')
    11 
    12 # 再调用 WebElement 对象的 send_keys 方法
    13 ele.send_keys(r'图片的完整路径')
    14 
    15 #如果需要上传多个文件,可以多次调用send_keys

    ——end——

  • 相关阅读:
    mac下的docker的Docker.raw占用空间很大?
    python模块uuid产生唯一id
    缓存溢出Buffer Overflow
    (原创)攻击方式学习之(3)
    JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);
    Java框架安全
    Java Web:主动和被动方式检测安全的框架
    一.配置简单的嵌入式tomcat和jetty
    使用embeded tomcat进行嵌入式javaee开发-启动tomcat
    安全隐患,你对X-XSS-Protection头部字段理解可能有误
  • 原文地址:https://www.cnblogs.com/RuiRuia/p/12176132.html
Copyright © 2011-2022 走看看