selenium web自动化测试

 selenium支持后台多平台多页面操作

selenium下载安装

1.先安装python环境和pytorch软件

在已有谷歌浏览器的情况下下载谷歌浏览器驱动(最好跟自己版本号对应,除非真的没有)

在服务中把谷歌相关的全部禁用,这样就不会自动更新,就不会导致下载的驱动后续无法使用的问题

浏览器开启

#保持浏览器打开状态(默认是代码执行完毕自动关闭)
browser1.add_experimental_option('detach', True)

如果不添加该段代码,则运行打开浏览器命令后会闪一下又马上关闭窗口

如果不写禁用沙盒模式,可能会出现兼容问题导致报错、闪退等情况

用函数封装打开浏览器的执行代码

def keepOpen():
    #创建设置浏览器对象
    browser1 =Options()
    #对创建的浏览器对象进行实质设置
    #禁用沙盒模式
    browser1.add_argument('--no-sandbox')
    #保持浏览器打开状态(默认是代码执行完毕自动关闭)
    browser1.add_experimental_option('detach', True)
    #创建并启动浏览器
    broOpen = webdriver.Chrome(service=Service('chromedriver.exe'), options=browser1)
    return broOpen
browser = keepOpen()  #从方法中返回一个启动的浏览器
#浏览器对象.get :打开指定网址
browser.get('https://www.baidu.com/') #括号中传字符串

注意:字符串中的网址必须带上http/https协议,因为有的未必做了一个默认选项

打开的网页我们叫做标签页

注意:对象名.close只用于关闭当前标签页,如果你有多个标签页,默认只关闭当前这个。如果你只有一个标签页,则会把整个浏览器关闭

#关闭标签页
browser.close()
#彻底关闭浏览器
browser.quit()
# 浏览器最大化最小化
#最大化
browser.maximize_window()
#最小化
browser.minimize_window()

如下代码表示:先最大化维持2秒后再最小化

browser.maximize_window()
time.sleep(2)
#最小化
browser.minimize_window()
#浏览器打开位置
browser.set_window_position()
在这里括号中会有两个参数,x和y,直接输入并用逗号隔开即可。其中x表示距离左边的像素距离,y表示距离上面的像素距离
#浏览器打开尺寸
browser.set_window_size(1920,1080)
左边数字表示宽,右边数字表示高
#浏览器截图
browser.get_screenshot_as_file('文件保存路径和名字')
如果括号中为
browser.get_screenshot_as_file('photo.png')
表示存在当前路径,取名为photo

需要注意:浏览器截图即只截图浏览器的截图,并不会直接截到我们整个电脑桌面

#自动刷新当前网页
browser.refresh()

截图+刷新应用场景:设置间隔时间刷新,每刷新一次截一次图,节省人工盯盘截图的时间

# #浏览器截图
# browser.get_screenshot_as_file('photo.png')
time.sleep(2)
#自动刷新当前网页
browser.refresh()

获取元素

元素定位

#元素定位导包
from selenium.webdriver.common.by import By

元素:对于一个网页里,所有可点击可执行等的东西都叫元素,也叫组件

元素定位:通过f12找到你要捕捉的元素,再进行后续操作

#定位一个元素
browser.find_element(By.ID,'kw')

#该方法为获取一个元素,通过ID的形式,ID名为kw

从百度获取元素成功

也可能会出现有一个网页有多个相同元素值的情况

定位多个元素时,element要加s

#定位多个元素
inputElements=browser.find_elements(By.ID,'kw')

此时返回的是列表形式

总结:

定位单个元素,返回结果,找不到就报错

定位多个元素,返回列表,找不到返回空列表

查找元素法二:

在浏览器的控制台中直接输入代码

#浏览器查找多个元素
document.getElementsById('元素值')

这种方法可以用来查找是否有多个重复元素名等

元素交互

元素点击:用于按钮中

元素输入/清空:用于输入框中

注意:百度现在已经把input改成text