UI自动化分享(国贸系统登录)
一、安装及环境
问题解决中查阅的资料:https://cloud.tencent.com/developer/article/2524154
https://developer.baidu.com/article/details/3235533
https://blog.csdn.net/Defry/article/details/142729011
https://developer.baidu.com/article/details/3292092
https://blog.csdn.net/suiusoar/article/details/140177587
https://blog.csdn.net/diaiyuan1008/article/details/101310337
https://www.cnblogs.com/yanghj010/p/18528682
https://www.pianshen.com/article/5069513202/
1.pycharm安装
2.selenium安装4.0以上版本
3.urllib3版本
4.python3.8,环境变量配置百度
5.也可以用jmeter+body自己录制脚本,应该也能实现UI自动化
二、元素定位的几种方法
1.CSS定位(第一种选择)
元素定位css selector(选择器定位)from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
语法:driver.find_element_by_css_selector("定位元素标识")或者element = driver.find_element(By.CSS_SELECTOR, ".login-btn")
可以通过id、class、标签名+属性,其他不经常使用就不介绍了
id:element = driver.find_element(By.CSS_SELECTOR, "#normal_login_passwd"),#表示通过id定位
class:element = driver.find_element(By.CSS_SELECTOR, ".login-btn") .表示通过class定位,图片中class用不了,所以用id方便
标签名:element = driver.find_element(By.CSS_SELECTOR, "input[name]")
标签名+属性:element = driver.find_element(By.CSS_SELECTOR, "input[name='passwd']")
层级定位:element = driver.find_element(By.CSS_SELECTOR, "span[class='bottom',]>button",通过父标签中class属性,找到子标签button
2.Xpath定位(第二种方式)
可以通过id、class、标签名+属性,其他不经常使用就不介绍了
id:element = driver.find_element(By.XPATH, "//*[@id='username']")或者driver_find_element_by_xpath('//input[@id="normal_login_loginName"]')
也可用webdriver的Key库这样写:element=driver.find_element_by_xpath('//input[@placeholder="手机号码或账号"]').send_keys('14488889999')
class:element = driver.find_element(By.XPATH, "//*[contains(@class, 'class属性值')]")或者element = driver.find_element_by_xpath(//*[contains(@class, 'class属性值')]")
标签+属性:element = driver.find_element(By.XPATH, "//input[@name='Loginname']")
注意:代码执行成功不代表实际成功,以新增为例,单据新增成功了,查看列表有新数据才算是实际完成了
二、国贸登录案例
心中需要有个大概框架:
哪个文件写配置信息,哪个文件写路径配置,哪个文件写公共类,哪个文件写用例,哪个文件写报告,哪个文件写执行
我们框架可以基于selenium扩展封装+PO思想+Python+Pycharm工具
PO封装思想(PageObject):将一个页面抽象为类class方法,将页面能够操作的元素抽象成一个个的方法
比如,我将登陆整个页面作为一个类class,然后用户名、密码作为一个方法def,这样这个页面封装便于维护,尤其前端改版
self代表实例对象,通过他可以调用属性方法
2.创建采购报盘案例
3.创建销售报盘案例