Selenium 实现 Web UI 自动化

2020-03-31  本文已影响0人  娃哈哈喜之郎

由于经常需要登录公司的租户平台导入多语言,以及排查一些 web 页面的问题,每次都要输入不同的账号等等这些人肉且频繁无脑的操作,直到我看到 selenium 之后,这一切发生了改观,可以通过 python3 + selenium3,来实现部分 web ui 的自动化,提高了做事的效率。

安装最新的 selenium

pip install selenium

如果在安装过程中遇到网络连接异常的问题,可以看我之前写的一篇文章:windows 命令行工具 cmd 设置网络代理

下载浏览器驱动程序。一般平时使用 chrome 浏览器,所以下载 chrome 浏览器驱动,下载地址:http://chromedriver.chromium.org

解压到 c 盘,路径为 C:\chromedriver_win32\chromedriver.exe,同时要记得将 C:\chromedriver_win32 路径加入到系统路径下,找到 电脑 > 属性 > 高级系统设置 > 环境变量 > 系统变量 > Path,然后添加 C:\chromedriver_win32

最简单的创建浏览器 driver,如下所示

from selenium import webdriver
driver = webdriver.Chrome()

由于现在主流的网站项目,都是前后端分离,部分元素是需要等待接口返回,异步加载后渲染的,所以会出现无法及时定位到元素的情况,我们可以通过隐式等待的方法,作用于整个 driver 的生命周期,如下代码示例,当第一次无法定位到指定元素时,driver 会等待 5s,如果 5s 后,还是没有找到该元素,才会抛出错误。

driver.implicitly_wait(5)

每次通过 driver 打开浏览器,都是页面顶部出现一个提示:Chrome正受到自动软件测试的控制,这个提示遮挡了页面的可视区域,我们可以通过配置 chrome_options 把这个提示去掉

option = webdriver.ChromeOptions()
option.add_experimental_option('useAutomationExtension', False)
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(chrome_options=option)

在运行 python 脚本结束后,浏览器 driver 会自动关闭,后来发现是由于变量 driver 是被定义在函数里,当该函数执行完,里面的变量会被销毁,所以函数内 driver 也不存在,所以浏览器会自动退出,所以如果希望脚本执行完,浏览器保持不退出,可以将 driver 定义全局变量里。

最完整创建浏览器 driver,如下所示

from selenium import webdriver
def get_driver():
    option = webdriver.ChromeOptions()
    option.add_experimental_option('useAutomationExtension', False)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = webdriver.Chrome(chrome_options=option)
    driver.implicitly_wait(5)
    driver.maximize_window()
    return driver
driver = get_driver()

下面来一个简单的网站登录的实战过程,代码示例如下

def login(driver, url, username, password):
    driver.get(url)
    driver.find_element_by_css_selector('#username').send_keys(username)
    driver.find_element_by_css_selector('#password').send_keys(password)
    driver.find_element_by_css_selector('#login').click()
driver = get_driver()
login(driver, 'https://xxx.com/login.html', 'abc', '123456')

selenium 支持八大定位,个人还是喜欢用 css 选择器去定位元素,关于更加复杂的一些 selenium 的应用场景,以后有机会再跟大家分享。

如果这篇文章对您有帮助,记得给作者点个赞,谢谢!

上一篇下一篇

猜你喜欢

热点阅读