uI自动化-- python(1)
uI自动化-- python(1)
一、环境搭建
1.根据当前本地浏览器版本下载相对应的chromedriver(其他浏览器同)
2.在pycharm配置环境
(1)创建新的项目
(2)创建虚拟环境
preferences-- project-- python interpreter--show all--‘+’
(3)添加依赖
a.preferences--搜索添加-- apply--ok
b.控制台 pip install xxx
3.将项目添加到git托管,配置不托管文件
选中文件--add to .gitignore
二、UI自动化最基本操作
driver = webdriver.Chrome( executable_path="/Users/kongweicheng/utils/selenium/chromedriver") # 打开Chrome浏览器并实例化,指定chromedriver地址 time.sleep(1) # 主进程睡眠1秒 driver.get("https://www.baidu.com") # 打开'https://www.baidu.com' time.sleep(1) driver.find_element_by_id("kw").send_keys("kongweisheng") # 定位到输入框(按id),并对输入框进行操作(在输入框输入kongweisheng) driver.find_element_by_id("su").click() # 定位到搜索按钮(按id)并点击该按钮 time.sleep(10) driver.quit() # 关闭该浏览器进程
三、pageobject
import time from selenium.webdriver.common.by import By from selenium import webdriver class TestOne: def setup_class(self): self.driver = webdriver.Chrome(executable_path="/Users/kongweicheng/utils/selenium/chromedriver") self.driver.get("https://www.baidu.com") def teardown_class(self): time.sleep(5) self.driver.quit() def test_baidu(self): self.driver.find_element(By.ID, 'kw').send_keys("python") time.sleep(2) self.driver.find_element(By.ID, 'su').click()
按页面分层,最基本功能为一个方法,一般将一个页面封装成一个class
注意:
1.setup()与setup_class的区别:setup()在每一个用例执行时都会执行该前置条件的方法,setup_class在执行用例前只执行一次该方法
2.setup()与teardown()的区别:前置条件与后置条件,一般将数据清理放在setup()中,数据在执行用例之前清除能够有效避免代码执行意外未能将数据完全清理干净
元素定位
常用的元素定位有8种,常用的有id,name,xpath,css,在这里id、name定位也可通过xpath或css实现,
注意xpath可以实现文本定位,其他的都可以使用css实现
# 简单的定位 driver.find_element_by_id('kw') driver.find_element_by_name('name') driver.find_element_by_partial_link_text('新闻') # xpath定位 根据路径定位 driver.find_elements(By.XPATH,'//*[@id = "kw"]')[0] # 属性+下标定位, * 为所有标签 driver.find_element(By.XPATH,'//div/input[@class = "class"]/../li[@name="name"]')#层级定位 driver.find_element(By.XPATH,'//input[1]/div[2]/li[@class="class"]')#层级+索引号定位 driver.find_element(By.XPATH,'//span[text()="工作台" and @class="menu-title"]')#文本元素+属性定位(重点) # css定位 根据标签元素定位 driver.find_element(By.CSS_SELECTOR,'div[class="site-wrapper"]')# 属性定位 driver.find_elements(By.CSS_SELECTOR,'div[class="site-wrapper"]')[1]# 属性+下标定位 driver.find_element(By.CSS_SELECTOR,'[class="cls-1"][cx="23.43"]')# 多属性定位 driver.find_element(By.CSS_SELECTOR,'div>input[value="查询"]') # 标签层级+属性定位 driver.find_element(By.CSS_SELECTOR,'div .el-button.gt-border-button>span')#css层级+标签层级定位 ,css层级定位,跨层时需要加空格,如上
三种等待时间
强制等待
无论页面是否加载完成,都要等待指定时间才能执行下一步
import time time.sleep(10) # 强制等待10秒时间
隐式等待
页面加载完成则执行下一步,没有加载完成,则继续等待到指定时间后再执行下一步
implicitly_wait(10) # 最多等待10秒
显式等待
每隔指定的时间查找一次这个元素,找到后马上执行下一步,未找到时,持续寻找到最大时间后,再执行下一步
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) # driver:webdriver的驱动程序(ie,firefox,chrome,或远程),timeout:最长超时时间,默认单位s,poll_frequency=0.5:休眠时间的间隔时间,默认为0.5 # ignored_exceptions=none:超时后的异常信息,默认情况下抛NoSuchElementException 异常
浙公网安备 33010602011771号