web自动化之selenium

阅读目录

selenium简介

Selenium官方文档

Selenium是一款用于Web程序的自动化测试工具。Selenium可以直接运行在浏览器中,模拟用户操作。Selenium支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等,但一般建议使用Firefox、Chrome浏览器【兼容性好】。Selenium支持跨平台(Linux、wins)、跨语言(java、Python、ruby、php等),既能录制脚本也可手动编写测试脚本。

selenium架构图(来源霍格沃兹教学图片)

 

环境搭建(以win10为主)

1、下载浏览器对应的driver,并给driver配置环境变量

  Chrome浏览器,对应的driver淘宝镜像:https://registry.npmmirror.com/binary.html?path=chromedriver/,选择与本地Chrome浏览器对应的版本;

  Firefox浏览器,对应的driver淘宝镜像:https://registry.npmmirror.com/binary.html?path=geckodriver/,选择最新的淘宝镜像即可;

  driver镜像文件,指定目录存储然后把目录配置到环境变量;

  补充:

  1、启动Firefox报:selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly exited. Status code was: 64

    解决:需要把geckodriver.exe放在python安装目录下

  2、启动Chrome报:selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to create Chrome process.

    解决:打开Chrome浏览器属性->兼容性,取消管理员操作 即可解决

 

 

2、验证driver配置

     cmd->chromedriver | chromedriver --version    

     cmd->geckodriver --version

 

Selenium+Python启动web应用demo

def open_browser():
    driver = webdriver.Chrome()
    driver.get('https://ceshiren.com/')
    time.sleep(2)
    driver.refresh()
    driver.get("www.baidu.com")

报错:

 

 解决:driver.get("http://www.baidu.com") url地址必须要加上http或https协议。

 元素加载等待

 强制等待:time.sleep()  忽略

   隐式等待:只关注元素是否找到,不含是否可操作,语法:driver.implicitly_wait(3)   

      一般隐式等待配置在代码开始运行的地方,隐式等待是全局生效,在所有find_element动作之前就执行此代码

  显示等待:更关注元素是否可操作性。语法:WebDriverWait().until()  or  WebDriverWait().until_not()

         示例: WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)

复制代码
def wait_until():
    driver = webdriver.Chrome()
    driver.get("https://vip.ceshiren.com/#/ui_study")
    WebDriverWait(driver, 10).until(
        expected_conditions.element_to_be_clickable(
            (By.CSS_SELECTOR, '#success_btn')))
    driver.find_element(By.CSS_SELECTOR, "#success_btn").click()
显示等待
复制代码

元素定位

 Selenium提供了八种定位方式:https://www.selenium.dev/documentation/webdriver/elements/locators/

常用定位方式有:css selector、xpath、ID、name,语法:driver.find_element(By.方式, '表达式'),重点为:css selector

css selector定位:

  相邻兄弟选择器: + (只是相邻的一个兄弟)
  后续兄弟选择器: ~ (元素同级下之后所有兄弟)
  父子元素选择器: >
  后代选择器: 空格

  demo 案例:来源于:https://blog.csdn.net/qq_36234441/article/details/115481192

复制代码
  
#input 选择id为input的节点

.Volvo 选择class为Volvo的节点

div#radio>input 选择id为radio的div下的所有的input节点

div#radio input 选择id为radio的div下的所有的子孙后代input节点

div#radio>input:nth-of-type(4) 选择id为radio的div下的第4个input节点

div#radio>nth-child(1) 选择id为radio的div下的第1个子节点

div#radio>input:nth-of-type(4)+label 选择id为radio的div下的第4个input节点之后挨着的label节点

div#radio>input:nth-of-type(4)~labe 选择id为radio的div下的第4个input节点之后的所有label节点

input.Vovlo[name=‘identity’] 选择class为.Volvo并且name为identity的input节点

input[name=‘identity’][type=‘radio’]:nth-of-type(1) 选择name为identity且type为radio的第1个input节点

input[name^=‘ident’] 选择以ident开头的name属性的所有input节点

input[name$=‘entity’] 选择以’entity’结尾的name属性的所有input节点

input[name*=‘enti’] 选择包含’enti’的name属性的所有input节点

div#radio>*.not(input) 选择id为radio的div的子节点中不为input的所有子节点

input:not([type=‘radio’]) 选择input节点中type不为radio的所有节点
View Code
复制代码
posted @   钟爱酷夏  阅读(624)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示