UI自动化测试学习笔记整理(一)

一、下载安装Python

  1.1官方文档安装 下载解压包:https://www.python.org/downloads/windows/

  1.2配置Python环境变量(如果已经在安装的时候勾选了相关参数安装好Python会自动帮忙配置好环境变量)

  1.3安装selenium:cmd命令提示符中通过pip install selenium安装;或者通过https://pypi.org/project/selenium/下载并进入相关目录通过python setup.py install安装

  1.4验证selenium安装是否成功:cmd命令提示符中输入python,然后import selenium不报错表示selenium安装成功

  1.5各个浏览器webdriver下载:

    Chrome:http://chromedriver.storage.googleapis.com/index.html

    Firefox:https://github.com/mozilla/geckodriver/releases

二、自动化中常用的类介绍

  2.1导入webdriver模块:from selenium import webdriver

  2.2导入等待时间模块: from time import sleep

  2. 3导入模拟鼠标ActionChains 模块: from selenium.webdriver.common.action_chains import ActionChains

  2.4导入模拟键盘操作keys模块:from selenium.webdriver.common.keys import Keys

  2.5导入下拉框操作模块:from selenium.webdriver.support.ui import Select

三、编写自动化测试时一些常用的操作

  3.1.driver = webdriver.Firefox()-通过webdriver启动浏览器

  3.2.driver.get('网页地址')-进入指定网页

  3.3.driver.set_window_size(400,800)#控制浏览器窗口大小

  3.4.driver.maximize_window()#浏览器全屏

  3.5.driver.back#浏览器后退

  3.6.driver.forward()#浏览器前进

  3.7drive.refresh()#刷新当前页面

  3.8.driver.find_element_by_id().clear()#清除文本

  3.9.driver.find_element_by_id().send_keys()#模拟按键输入

  3.10.driver.find_element_by_id().click()#单击元素

  3.11driver.find_element_by_id().size#打印输入框尺寸

  3.12.driver.find_element_by_id().text#打印页面文字信息

  3.13driver.find_element_by_id().get_attribute("")#括号内可输入元素名称比如:name,id,class,type。作用是获取括号内元素的值

  3.14driver.find_element_by_id().is_displayed()#返回元素结果是否可见True/False

  3.15.driver.current_url)#打印当前页面的URL  

  3.16.driver.implicitly_wait(10)#隐式等待10秒

  3.17.driver.current_window_handle#输出当前窗口句柄

  3.18.driver.window_handles # 获取当前全部窗口句柄集合

  3.19.driver.close()  # 关闭当前窗口

  3.20.driver.quit()#退出浏览器

四、简述元素定位的八种方法

       4.1.find_element_by_id()——id定位

       4.2..find_element_by_name()——name定位

       4.3.find_element_by_class_name()——class name定位

       4.4.find_element_by_tag_name()——tag name定位

       4.5.ind_element_by_link_test()——link test定位

       4.6.find_element_by_partial_link_test()——partial link test定位

       4.7.find_element_by_xpath()——xpath定位

       4.8.find_element_by_css_selector()——css selector定位

  注意:css定位方法的一些介绍链接:

    https://m.jb51.net/article/168347.htm

    https://blog.csdn.net/ruoruodetouzizhe/article/details/83026366

  注意:需要使用一组定位时候一定要找到相同类型属性的一组元素,才可以定位如下实例

    #如果只需要点击其中的某几个元素,可使用pop方法
    #inputs = driver.find_elements_by_tag_name('input').pop(2).click()
    #使用数组的方式点击其中第几个复选框
    #inputs = driver.find_elements_by_tag_name('input')[1].click()

五、对鼠标的一些简单操作

  on_element=driver.find_element_by_id("想要操作的元素ID")

  5.1.ActionChains(driver).click(on_element) ——单击鼠标左键#这里的

  5.2.ActionChains(driver).click_and_hold(on_element) ——点击鼠标左键,不松开

  5.3ActionChains(driver).context_click(on_element) ——点击鼠标右键

  5. 4.ActionChains(driver).double_click(on_element) ——双击鼠标左键

  5.5.ActionChains(driver).drag_and_drop(source, target) ——拖拽到某个元素然后松开

  5.6.ActionChains(driver).drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

  5.7.ActionChains(driver).key_down(value, element=None) ——按下某个键盘上的键

  5.8.ActionChains(driver).key_up(value, element) ——松开某个键

  5.9.ActionChains(driver).move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

  5.10.ActionChains(driver).move_to_element(on_element) ——鼠标移动到某个元素悬停操作

  5.11.ActionChains(driver).move_to_element_with_offset(to_element, xoffset, yoffset)——移动到距某个元素(左上角坐标)多少距离的位置

       5.12.ActionChains(driver).perform() ——执行链中的所有动作

  5.13.ActionChains(driver).release(on_element=None) ——在某个元素位置松开鼠标左键

  5.14.ActionChains(driver).send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

六、对键盘的简单操作

  6.1.ActionChains(driver).send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

  6.2.driver.find_element_by_id().send_keys('xxxx') #输入框输入内容

  6.3.driver.find_element_by_id().send_keys(Keys.BACKSPACE) #退格

  6. 4.driver.find_element_by_id().send_keys(Keys.CONTROL, 'a') #选中复制

  6. 5.driver.find_element_by_id().send_keys(Keys.CONTROL, 'x') #选中剪切

  6.6.driver.find_element_by_id().send_keys(Keys.CONTROL, 'v') #选中粘贴

  6.7.driver.find_element_by_id().send_keys(Keys.BACK_SPACE)#回删一个字符

  6.8.driver.find_element_by_id().send_keys(Keys.ENTER)#使用回车代替单击

七、通过js方法进行输入

  7.1

     text = "测试企业"#将要输入的内容定义一个变量

    js="document.getElementById('id的元素').value='"+text+"';"

    driver.execute_script(js)

  7.2 -这里要选择的是id和i想要传入的数值

    js = "$('#%s').val('%s')" %  ('id的元素', '测试企业')

    driver.execute_script(js)

  7.3

    js = 'document.getElementById("mainBody").send_keys("123456");'
    driver.execute_script(js)

八、对操作结果的断言

8.1.driver.title#方法可以获取当前页面的标题显示的字段,可对标题进行断言

8.2.driver.current_url#方法获取当前页面url,可对url进行断言

8.3.presence_of_element_located:判断某个元素是否被加到dom树下,不代表该元素一定可见

8.4visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不为0

8.5.visibility_of:跟上面的方法是一样的,只是上面需要传入locator,这个方法直接传定位到的element就好

8.6.presence_of_all_elements_located:判断是否至少一个元素存在于dom树中,举个例子,如果页面上有n个元素的class都是’coumn-md-3’,name只要有一个元素存在,这个方法就返回True

8.7.text_to_be_present_in_element:判断某个元素中的text文本是否包含预期字符串

8.8.text_to_be_present_in_element_value:判断某个元素中的value属性值是否包含了预期字符串

8.9.frame_to_be_availabe_and_switch_to_it:判断该frame是否可以switch进去,如果可以,则返回True并且switch进去,否则返回False

8.10.invisibility_of_element_located:判断某个元素是否不存在于dom树或不可见

8.11.element_to_be_clickable:判断某个元素是见并且是enable(有效)的,这样的话才叫clickable

8.12.staleness_of:等某个元素从dom树下移除,返回True或False

8.13.element_to_be_selected:判断某个元素是否被选中,一般用于select下拉表

8.14.element_selection_state_to_be:判断某个元素的选中状态是否符合预期

8.15.element_located_selection_state_to_be:跟上面的方法一样,只是上面的方法传入定位到的element,这个方法传入locator

8.16.alert_is_present:判断页面上是会否存在alert

九、多表单切换

  9.1.switch_to.frame()括号内的值默认是可以直接取表单的ID或者name属性,如果iframe没有可用的ID和name属性,则可以通过元素定位的方式定位到之后再传到括号内。

  9.2driver.switch_to.parent_content()返回上一级表单

  9.3.driver.switch_to.parent_frame()从子frame切回到父frame,如果当前已是主文档,则无效果

十、动态id的定位方法

  10.1.driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")

  contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

  10.2.driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")

  starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

  10.3driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]")

  ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

十一、对弹出框的操作

11.1.driver.execute_script("window.alert('这是一个alert弹框。');") # 注意这里的分号是英文输入法的分号,不能用中文;此方法可以在页面弹出一个提示框

11.2.driver.switch_to.alert.accept() #处理web页面的警告窗

11.3.driver.switch_to.alert.text#获取弹框里的txt文本

11.4.driver.switch_to.dismiss()#点击取消按钮,如果有的话

11.5.send_keys-输入值。这个alert\confirm没有对话框就不能用了,不然会报错

十二、异常截图

  12.1.driver.get_screenshot_as_file(u"D:/异常截图%s.png" % datetime.now().strftime("%Y%m%d.%H%M.%S.%f")[:-3])#需要导入from datetime import datetime

十三、滚动条的操作

  13.1.内嵌式滚动条

  Drag=driver.find_element_by_xpath("xxx") #找到滚动条

  ActionChains(driver).drag_and_drop_by_offset(Drag, 0, 100).perform()#控制滚动条的行为,每次向y轴(及向下)移动10个单位

  13.2.浏览器滚动条

  js="var q=document.documentElement.scrollTop=10000"

  driver.execute_script(js)#将滚动条移动到页面的底部

   js="var q=document.documentElement.scrollTop=0"

  driver.execute_script(js)#将滚动条移动到页面的顶部

  将页面滚动条移动到页面任意位置,改变等于号后的数值即可

  js="var q=document.documentElement.scrollTop=xxx"

  driver.execute_script(js)

十四、下拉框(记得先要导入下拉框类之后才可进行此操作)

  注意:Select类:用于定位<select>标签。

  sel=driver.find_element_by_id('')#定位到下拉框元素

       14.1.select_by_value():通过value值定位下拉选项。

  Select(sel).select_by_value('value的值')

  14.2.select_by_visible_text():通过text值定位下拉选项。

  Select(sel).select_by_visible_text("txt内容")

  14.3.select_by_index():根据下拉选项的索引进行选择。第一个选项为0,第二个选项为1。

  Select(sel).select_by_index(索引值)

十五、Page Object用法

  Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试案例更关注于业务而非界面细节,从而提高测试案例的可读性。

       Page Object的设计思想上是把元素定位与元素操作进行分层,这样带的来最直接的好处就 是当元素发生变化时,只需维护page层的元素定位,而不需要关心在哪些测试用例当中使用了 这些元素。在编写测试用例时,也不需要关心元素是如何定位的。

  Page Object 设计模式的优点如下:

  • 减少代码的重复。
  • 提高测试用例的可读性。
  • 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目。
posted @ 2020-10-27 22:51  LL达达  阅读(220)  评论(0)    收藏  举报