Python+selenium web测试入门基础!

1198 篇文章 46 订阅
764 篇文章 11 订阅

自动化测试框架

  from selenium import webdriver

获取浏览器对象

  我这里是edge浏览器,用的是edge的webdriver

  # webdriver获取浏览器对象  driver = webdriver.Edge()

尝试打开网站并关闭​​​​​​​

  # 准备一个网址  url = "https://www.baidu.com/"  driver.get(url)  # 资源回收  driver.quit()

  元素定位

  定位普通元素

  元素可通过 ID,NAME,CLASS_NAME查找(tagname不常用)​​​​​​​

  driver.find_element(By.ID,"kw").send_keys("python")  driver.find_element(By.NAME,"wd").send_keys("python")  driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("python")  # 点击(click)id为su的控件  driver.find_element(By.ID,"su").click()

  .send_keys() 表示往元素中填入内容。

  .click() 表示点击元素

  也可以通过css选择器,前缀为’#’ 代表ID值, ‘.’ 代表class值,[ ]可直接输入内容定位元素​​​​​​​

  By.CSS_SELECTOR,'.s_ipt').send_keys('python')  driver.find_element(By.CSS_SELECTOR,'[name=wd]').send_keys('python')  driver.find_element(By.CSS_SELECTOR,'[value=百度一下]').click()  xpath定位法,通过决定路径或属性查找的方式来定位元素。  //* 代表全局查找符合条件的元素  [@xx=”xxx” ] 代表查找属性xx等于xxx的元素,不带@就不是属性,一般用于搜索文本  driver.find_element(By.XPATH,"//*[@id='kw']").send_keys('python')  driver.find_element(By.XPATH,'//*[@id="su"]').click()

  定位a标签(链接标签)

  可通过linktext、partial linktext定位

  driver.find_element(By.LINK_TEXT,'hao123').click()

  driver.find_element(By.PARTIAL_LINK_TEXT,'hao').click()

  获取元素属性​​​​​​​

  # 获取元素大小  print(driver.find_element(By.ID, 'kw').size)  # 获取元素文本  print(driver.find_element(By.ID, 'kw').text)  # 获取文本属性  print(driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').get_attribute('href'))  # 元素是否可见  print(driver.find_element(By.ID, 'kw').is_displayed())  # 元素是否可用  print(driver.find_element(By.ID, 'kw').is_enabled())

获取网页属性​​​​​​​

  # 获取页面title  print(driver.title)  # 获取网页url  print(driver.current_url)  # 浏览器后退  driver.back()  # 浏览器前进  driver.forward()  # 浏览器刷新  driver.refresh()  # 关闭当前页面  driver.close()

  元素等待

  该操作主要是防止界面跳转后,新界面还未完全加载就进行操作步骤,从而导致代码找不到相应的元素而报错。

  强制等待

  通过time库,让程序强制停止一段时间,单位为秒。​​​​​​​

  # 强制等待  import time  time.sleep(1)

  该方法比较死板,比较浪费时间,实际使用不太推荐,可在编写代码时用该方法查看代码运行效果。

  显示等待

  等待某个元素加载完成后继续运行代码,每0.5秒检测一次,如果出现该元素就运行代码,如果一直未出现(直到到达指定的时间),就会返回TimeOutException的错误。​​​​​​​

  from selenium.webdriver.support.wait import WebDriverWait  from selenium.webdriver.support import expected_conditions as EC  WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'1')))

  优点:比较节省时间,在需要的元素出现时可直接开始运行代码,不必等待网页的全部加载。

  缺点:导入的库太多

  隐式等待

  driver.implicitly_wait(5)

  优点:不需要设定多个参数,也不需要导入库,在元素加载完毕后能够直接运行代码。

  缺点:因为没有明确等待的元素,所以隐式等待需要等待所有元素加载完毕在运行代码,在弱网状态时建议使用显示等待,让需要使用的元素出现时及时运行代码,节约时间。

  鼠标操作​​​​​​​

  # 导入鼠标操作 库包  from selenium.webdriver.common.action_chains import ActionChains  # 鼠标右击  action.context_click(driver.find_element(By.ID,'kw'))  # 鼠标悬停  action.move_to_element(driver.find_element(By.CLASS_NAME,'soutu-btn'))  # 鼠标拖拽 第一个是拖拽目标,第二个是到达地址  action.drag_and_drop(driver.find_element(xxx),driver.find_element(xxx))  # 执行代码  action.perform()

   键盘操作​​​​​​​

  el = driver.find_element(By.ID,'kw')  # 输入内容  el.send_keys("python")  # 全选  el.send_keys(Keys.CONTROL,'a')  # 删除  el.send_keys(Keys.BACK_SPACE)  # 复制  el.send_keys(Keys.CONTROL,'c')  # 粘贴  el.send_keys(Keys.CONTROL,'v')

  下拉框的选择

   该功能用于下拉框的选择,用于网页的’<select>’模块选择。

图片

​​​​​​​

  # 下拉框的库  from selenium.webdriver.support.select import Select  select = Select(driver.find_element(By.CSS_SELECTOR,'[name=city]'))  # 通过index选择  select.select_by_index(0)  time.sleep(2)  # 通过value选择  select.select_by_value('sh')  time.sleep(2)  # 通过文字选择  select.select_by_visible_text('成都')

  滚动条

  Python不能直接调用滚动条,但是可以使用js语言来调用。​​​​​​​

  # 通过js语言进行滑动  # 隐式等待无法滚动,滚动前不能添加隐式等待  time.sleep(2)  js_str = "window.scrollTo(0,10000)"  driver.execute_script(js_str)

  警告框的处理

  该功能主要用于处理网页的报错警告框,例如网站的必读信息、登录过期等消息。​​​​​​​

  # 警告框需要切换到警告框再处理  alert = driver.switch_to.alert  # 打印警告框内容  print(alert.text)  # 取消警告框  alert.dismiss()  # 确定警告框  alert.accept()

  frame的切换

   该功能用于在某些网页中,网页内会内嵌一个网页,此时需要从原本的网页切换到内嵌的网页中,才能对内嵌的网页进行操作。

图片

  driver.switch_to.frame(“frame元素的位置”)

  标签页的切换

   页面标签我们叫做habdle,其中可以通过两种方式获得页面的标签。

图片

​​​​​​​

  # 获取页面 获取当前handle,新打开的页面在所有handle列表的最后面  # 获取浏览器所有页面标签的list  print(driver.window_handles)  # 打印当前的页面标签  print(driver.current_window_handle)

   每个新产生的页面标签都会排到list的后面,无论在浏览器上面怎么显示,新的页面标签就像用list.append()一样加入标签列表中。

  driver.switch_to.window(driver.window_handles[1])

  截图

全屏截图并直接保存:

  driver.get_screenshot_as_file("截图.png")

截图后按照png格式保存为Python的变量:

  shotpng = driver.get_screenshot_as_png()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值