web自动化快速度入门


1.1、什么是web自动化测试

1.2、selenium

selenium套件:

  • selenium IDE  。脚本录制工具,但录制的东西可用性不高,了解即可。
  • selenium webdriver, 核心
  • selenium grid

selenium的优势:

  • 行业标准 。大家要自动化测试先学selenium,在学其他的,因为其他的比如cypres、playwright其实都是借鉴selenium而重新开发出来的新框架。
  • 支持多浏览器
  • 支持多语言。python+selenium,java+selenium,go+selenium等等,主流的编程语言都支持
  • 远程支持

1.3、selenium安装

依赖:

  • 浏览器
  • selenium webdriver 驱动
  • python 绑定库 selenium

步骤:

  • pip install selenium
  • 下载webdriver 驱动。chrome通过官方下载或镜像下载,和浏览器版本对应(71比较稳定)。chrome有一个比较恶心的强制更新机制,暂没有办法停止更新,导致自动化脚本经常运行不了,需要更新对应的webdriver。或者用火狐浏览器比较稳定。
  • 放入安装目录,python安装目录或者其他任意环境变量地址下,最好放python安装目录下。

1.4、selenium使用

基础操作
from selenium import webdriver
driver = webdriver.Chrome()

# 访问网址--百度
driver.get('www.baidu.com')

# 页面刷新
driver.refresh()

# 访问另一个网址--豆瓣
driver.get('www.douban.com')
# back
driver.back() #回到了百度

# 前进
driver.back() #回到了豆瓣
# 最大化
driver.maximize_window()
# 最小化
driver.minimize_window()

# 全屏
driver.screen_window()

# 固定尺寸
driver.set_window_size(400,400)

# 关闭浏览器
driver.quit()
# 关闭标签页
driver.close()

基础属性

1.5、selenium原理

  

1.6、selenium进行自动化测试流程

手工测试:

  • 打开浏览器
  • 输入网址
  • 点点点
  • 结果验证
  • 编写测试报告

自动化测试:

  • 打开浏览器
  • 输入网址
  • 点点点(先找到输入、点击的元素在哪儿) ==》 元素定位
  • 断言,预期与实际结果,assert
  • 生成测试报告

1.7、扩展:可能会遇到的问题

  (1)报错无法定位到元素,出现的原因可能有哪些?

    a、元素定位表达式有没有正确。怎么确定?浏览器当中ctrl +f 能不能找到元素,且是否唯一。

    b、元素表达式正确。检查是否设置了等待。(正常情况下全局设置隐性等待,可在报错位置加强制等待进行调试)。

    c、元素是否在另一个窗口(driver.window_handles)。

    d、元素是否在iframe中,切换到iframe中在进行定位元素。

    e、元素动态变化(1、表达式动态变化、2、需要鼠标悬浮才能看到所要定位的元素,3、其他情况下,需要做某些动作元素才能显示出来进行定位。)

2、selenium IDE

3、元素定位

3.1、什么是元素定位

  1. id
  2. name
  3. css_selector
  4. class_name
  5. tag_name
  6. partial_link_text
  7. link_text : driver. find_element_by_link_text("登录")
  8. xpath

3.2、素定位的方式

  3.2.1、find_element和fid_elements

  • find_element和fid_elements的区别:
    • find_element得到的是一WebElement对象,而find_elements得到的WebElement对象列表
    • find_element只会返回查到到的第一个元素,如果找不到报NoSuchElementException错,而find_elements找不到不报错返回空列表。
    • 自动化测试尽量不使用不加s的,加s在爬虫时会用到,把所有的都爬出来保存起来。
    • find_element找到不报错,需做要异常捕获,而find_elements则不需要做。

  

  3.2.2、Webelement 对象

  属性:

  • tagname
  • text
  • parent
  • get_attributle()

  操作:

  • click() 单击元素
  • send_keys()
  • submit()
  • clear() 清空

  3.2.3、find_element('','')与find_element_by_xxxx('')用哪一种

  • find_element_by_xxxx,这种用法不推荐,原因一是不灵活,原因二是即将被selenium 4.0 官方弃用。
  • 要用find_element('','')这种写法,这是标准写法,而最终用find_element(By.xxxx,'xxxxx')这种方式。

3.3、HTML

   什么是 HTML?HTML 是用来描述网页的一种语言。

  • HTML 指的是超文本标记语言 (Hyper Text Markup Language)
  • HTML 不是一种编程语言,而是一种标记语言 (markup language)
  • 标记语言是一套标记标签 (markup tag)
  • HTML 使用标记标签来描述网页

  上面提到八大元素定位方式,那么这八大元素定位方式怎么来的,实际上就是根据html的特征来的。

  3.3.1 THML构成

  HTML是元素定位的依依据。

  • 标签 ,即<标签名>...... ,标签名:div 、form、span......很多
  • 属性, 即<标签名 name=value>......,开始标签中,带等号的叫属性,等号左边叫属性名,右边叫属性值
  • text,  即<标签名 name=value>text,一个标签可以有文本,也可以没有文本
  • 内嵌标签,即
  • ....

  对于一个hmlt来说最外层只有一个标签....,html标签又分成两个子标签...和...,head标签存放网页的一些摘要信息如网页的标题,body标签里又嵌套了好多子标签,一个网页面所展示出来的内容全部都在body里边。

  3.3.2、常见HTML标签

  • p           表示段落
  • h1 -h6  标题,1-6级标题
  • div        表示空的标签块,没有具体的内容,相当于给你一个方框,你自己去往里边填数据。可以往div里边放一些子标签。
  • span     此标签是可以不换行的
  • a           表示超连接,通过属性href的配合实现超连接
  • img      通过属性src配合,src表示图片路径
  • iframe  一个html里边嵌套另一个html,需要src="另一个网址"来配合
  • input: 此标签一般不成对出现,通常有name、value、type属性,type类型有text、password、checkbox、radio、file
    •    例如杨大为,像向台传值是:{"favor_singer":"yangdawei"},所以的有name属性通过name属性传递数据
  • select  下拉选择框,通常与配合使用
  • form     对于前台向后台有交互的标签都可以放在
    ......之间,form表单的作用是用户前后端进行数据交互一种方式。把前台的数据通过form表单方式传给后端。
  • li           列表,可以嵌入
      之中

      3.3.3、常见HTML属性

    • id
    • name
    • class_name
    • value
    • readonly
    • disabled
    • checked
    • placeholder

      3.3.4、CSS

      

      伪元素:

      h2::before{

        content: Hello

    3.4、8大元素定位方式具体怎么使用 

    • id   唯一
    • name,常用来定位输入框
    • class_name,常用,中间不能有空格
    • link_text,通过文本定位
    • partial_link_text
    • tag_name 不常用
    • xpath,最常用,class中间可以有空格
    • css_selector,最常用

      元素定位注意事项:

    • 动态变化属性
    • 符合条件查找

    扩展一、真的有8大元素定位吗?

    4、xpath

    定义:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。andriod app前端就是用xml编写的。xml因与html长的过于相似,所以xpath也可以用来查找html元素,可以通用。

    4.1、写xpath三种方式

    • 浏览器,按F12,鼠标定位到元素位置,右键复制xpath,xtrl +f,弹出搜索框,可输入xpath反查代码
    • chropath 插件复制xpath
    • 手写xapth,必要时可手写(如复制出来的过长)

    4.2、xpath语法

    • 绝对路径:从根目录开始。例如/html/body/.........
    • 相对路径:在一个路径下,另外的路径以这个路径作为叁照。例如//input[@name="q"]。抽象后的语法://标签名[@属性名="属性值"]
    • 相路径和绝对路径都是可以找到元素,但一般不用绝对路径查找元素。因为(1)前端改了面页效果(如加一个特效、加几个div)都会影响绝对路径(2)绝对路径太长,不便维护

      表达式                             描述

      nodename                       选取此节点的所有子节点。

      /           从根节点选取。

      //             从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置。相对路径。

      .           选取当前节点。

      ..             选取当前结点的父节点,例如//div[@id="anony-nav"]//../.. 找祖先的时候只能一层一层上找

      @            选取属性

      and 

      text()            可重点掌握,因为text()在css选择器里没有,只有xpath里才有。        

      contains()        

      索引            1、加括号 2、索引从1开始。

      使用xpath 查找元素原则:哪个特征最明显,就用哪个。

      组合条件:

      id name class_name,例如://input[@name="q" and @type="text" and @size="12"]

      有的元素没有多少属性,而就算有,这个属性的特征也不明显(存在多个元素),可利用其父元素(假如其父元素有明显的特征id)。

      元素的id是唯一的:在同一个页面中不可能存在两个元素id相等。

      子代元素://div[@id="anony-nav"]/div[@class="anony-sry"]

      子孙代元素://div[@id="anony-nav"]//div[@class="anony-sry"]

      通过儿子找父亲://div[@id="anony-sry"]//../..找祖先的时候只能一层一层上找

      xpath用法总结:

    • //input[@name=""]
    • and 组合属性
    • //div/input 单斜杠通过父亲找儿子
    • //div//input 通过祖先找孙子
    • ..两个点,儿子找父亲
    • //a[text()="读书"],通过文本找元素,text()不用@,因为不是属性是个函数,text()经常与contains()组合使用,因为原代码中的文件经常左右两边会有空格,对显示没影响,但对定位是有影响的,会导致定位不到,所以要与contains()组合使用。如//a[contains(text(),'读书')]、//a[contains(@class,'anoly')]
    •  索引有两个注意事项:1、加括号 2、索引从1开始。(//a[contains(text(),'读书')])[1]
    • following-sibling、preceding-sibling、ancestor 这三个轴用的多,其他的轴不太怎么用。

        (1)ancestor:a//ancestor::div[@id="anony-nay"], 表示去找a标签的祖先,这个祖先名字叫div且有id属性值为"anony-sns“

        (2)following-sibling:表示后面的同胞,说白了就是找一个元素的弟弟。//*[@class="account-form-3rd-hd"]//following-sibling::div

        (3)preceding-sibling:表示前台的同胞,说白了就是找一个元素的哥哥。

    • * 表示通配符,任意元素名称。//*[@id="anony-sns"]

     

    4.3、轴

      轴:你想通过一个元素去找另外一个元素,能找到前提这两个元素之间的有关系如父亲、儿子、祖先、兄弟。

      //div//table//td//preceding::td

      轴名称                                 结果

      ancestor        选取当前结点的所有先辈(父、祖先等)。

      ancestor-or-self     选取当前结点的所有先辈(父、祖先等)以及当前节点本身。

      attribute         选取当前节点的所有属性

      child          选取当前节点的所有子元素

      descendant         选取当前节点的所有后代元素(子、孙等)

      descendant-or-self      选取当前节点的所有后代元素(子、孙等)以及当前结点本身

      following         选取文档中当前节点的结束标签之后所有节点。

      namespace       选取当前结点的所有命名空间节点。

      parent          选取当前节点的父节点。

      preceding          选取文档中当前节点的开始标签之前的所有节点。

      preceding-sibling      选取当前节点之前的所有同级节点。哥哥。姐姐

      self            选取当前节点

    • following-sibling、preceding-sibling、ancestor 这三个轴用的多,其他的轴不太怎么用。

    4.4、CSS选择器

    • input#id   例如//input#ydw,表示找input元素它的id是'ydw'
    • input.classname      ,表示找input元素且class='XXXXXX'
    • input[prop=value]
    • input.class chilld 子孙,注意有空格
    • input.class> 儿子,直系

    4.5、CSS选择器语法

      .class                         .intro                   选择class="intro"的所有元素                              1

      #id               #firstname    选择id="firstname"的所有元素                           1

      *                *         选择所有元素                                                     2

      element               p        选择所有

    元素                                               1

      element,element  div,p          选择所有

    元素和所有

    元素                    1

      element element    div p          选择

    元素内部的所有

    元素                    1

      element>element      div>p         选择父元素为

    元素的所有

    元素            2

      element+element    div+p        选择紧接在

    元素之后的所有

    元素                        

    4.6、谓语

    4.7、索引

    4.8、xpath和css选择器语法比较

      祖先关系:

      xpath:        //input//div

      css:      input div

      父子关系:

      xpath:  //input/div

      css:   //input>div

      第几个儿子:

      xpath:  //form[@id="form"]/input[1]

      css:     //form#form>input:nth-child(1)

      大弟弟:

      css:    //form#form + div

      或者:

      xpath:  //input/div | //input/a

      css:   //input div,input a

    4.9、xpath和css选择器各有什么优势

    • css写法更简洁
    • css速度更快
    • css不支持文本写定位,即text()
    • xpath功能更强,对于复杂定位反而更简洁

        

        

    扩展1:伪元素操作

    扩展2:Shadow DOM

    5、等待

    5.1、为什么要用等待

      页面打开因为要有个加载过程,要等页面出来才能方便定位元素。

    5.2、三种等待方式

       1、强制等待,不够灵活,time.sleep(),暂停代码运行,适用于所有类型的等待。

       2、隐式等待(只能用来查询元素,find_element开头的方法能用),背后默默的等感觉不到他的存在,全局只需设置一次,所以一般来说启动浏览器之后不要  

       忘记设置隐性等待,之后每次找元素的时候就会自动触发隐性等待。超时找不到元素会报错。

    • driver.implicitly.wait(10)
    • 类似于系统监控,效率高,比较隐藏的找到凶手

       3、显示等待(明确等待的条件),每需要用到一次,就需要调用一次(非全局配置),另外不仅可以等元素查找还可以适用其他的等待(如等待获取浏览器的

               标题这种时候用隐式等待就不行,因为获取浏览器的标题不属于元素定位,所以只能用time.sleep()或显示等待)。显示等待一般可以用time.sleep()替换掉,

       但是time.sleep()有个硬伤,时间时死的不够智能,所以为了代码智能一点还是用显示等待。显示等待时间超出了就会报错。

    • 类似于派出专项小分队设卡检查
    • 隐式等待某些情况找不到,就要用显示等待
      from selenium import webdriver
      from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions
    # 访问百度
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    # 设置显性等待
    wait = WebDriverWait(driver, 10)
    locator = ['id', 'kw']
     # 显式等待使用方式之一:等待元素(常见有三种)

    # 等待某个元素加载
    elem = wait.until(expected_conditions.presence_of_element_located(locator))
    # 等待元素可见
    elem = wait.until(expected_conditions.visibility_of_element_located(locator))
    # 等待元素可以被点击
    elem = wait.until(expected_conditions.element_to_be_clickable(locator))
    #元素出现后在进行各种操作
    elem.send_keys('NBA')
    elem.submit()
     # 显式等待使用方式之二:等待非元素(此处也可用time.sleep()进行强制等待)
    wait.until(expected_conditions.title_contains('NBA'))#等待标题栏出现文本包含NBA
     # 输出标题栏内容(如果上面不用显示等待,而用隐式等待,输出的内容有可能是不正确的(输出之前的标题),因为隐式等待只能等元素,不能等非元素。)  
    print(driver.title)
     4、三种等待使用流程

      全局用上隐式等待,如果遇到隐式等待不起作用,再用time.sleep()调试,如果好用在把time.sleep()替换换成显示等待。

     

    6、三大切换

    6.1、窗口切换

     driver.current_window_handle # 获取当前窗口的句柄handle
     driver.window_handles # 获取所有窗口句柄,以列表形式返回
     driver.switch_to(driver.window_handles[-1]) # 切换到最新窗口,-1 表示获取最新的窗口,0表示第1个窗口

    6.2、iframe切换

      (一)切换 iframe

      switch_to.frame(iframe_reference)进行切换,可以以下3种方式进行切换:

    • 1、index,从0开始,这种方式一般不用,很难通过页面确定是第几个iframe,例如driver.switch_to.frame(0)切换到第1个iframe,下标是从0开始的
    • 2、name 属性,例如driver.switch_to.frame(‘iframeResult’)
    • 3、WebElement 对象,先把iframe元素本身找到,然后再传进来。如iframe = driver.find_element('id','iframeResult'),driver.switch_to.frame(iframe)

      (二)切换默认的HTML

      switch_to.default_content()

      (三)切换到上一级iframe

      switch_to.parent_frame()

      例子:https://www.w3school.com.cn/tiy/t.asp?f=eg_html_iframe

    6.3、alter弹框切换

           

       alter弹框,当页面上出现alter弹框后,此时按F12是看到不到页面上的元素的一片空白,导致没法定位元素,因为此时此刻页面停留在弹框上面,里面所有的

      元素都会消失,此时怎么定位页面页面上的元素,必须把现alter弹框关掉,关掉后其他元素才会出来。像这咱原始的alter现在已经很少出现了,现在的弹框不是通过alter实现的,而是通过标签实现的直接点接就可以了。

    • my_alter =driver.switch_to.alter # 切到alter弹框上。注意alter没有括号,也不需要传参,因为alter全局只会出现一次。
    • myalter.accept() # 点击弹框上确认按钮的意思,现次回到主页面。
    • myalter.dismiss() # 点击弹框上取消按钮的意思,现次回到主页面。

      上面这种弹框用的比较少了,都用新技术了,现在很多弹框都是通过js去加载一个新的元素,然后把它悬浮在老的元素上面更多是用到css和js组合。

    6.4、切换的等待

      (1)窗口切换要不要等待,万一没切换过来怎么办?

       基本不需要,因为窗口切换很快,除非遇到个别情况下电脑卡顿造成的,正常情况下不需要等待,如果设置等待可用强制等待或显示等待。

       

       from selenium import webdriver
    import time
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions
    driver = webdriver.Chrome()
    driver.get('www.baidu.com')
    elem = driver.find_element('id','kw')
    elem.send_keys('NBA')
    elem.submit()

    # 注意此处是方法二的一个参数,获取所有的窗口句柄,一定要在点击新页面前获取
    all_handles = driver.window_handles
    driver.find_element_by_link_text('雅虎').click() # 打开一个新的窗口

    # 方法一设置强制等待
    time.sleep(2) # 设置2秒等待新窗口打开

    # 方法二设置显式等待
    wait = WebDriverWait(driver,2)
    wait.until(expected_conditions.new_window_is_opened(all_handles)) #注意这个参数,all_handles

    handle = driver.switch_to(driver.window_handles[-1])# 然后在手工切换
    driver.switch_to.window(handle)
    time.sleep()
    print(driver.title)

     (2)iframe切换要不要等?一般也不需要等。但等了也无所谓可以让代码更健壮,只是代码变复杂
      ......
      
    iframe =driver.find_element('id','iframeResult')
      # 执行下面这个等待后,会自动完成切换,不用在手工切换iframe
    WebDriverW(driver,2).until(expected_conditions.frame_to_be_available_and_switch_to_it(iframe))
      
      ......
      也可用强制等待,但需要手工切换ifame   
      (3)alter,道理同iframe切换。现在页面很少用原生弹窗,所以此方法了解即可,用的时候在查。
       wait = WebDriverWait(driver,2)
    wait.until(expected_conditions.alert_is_present))
    
    

    7、ui交互操作

      web测试过程中的都有哪些浏览器操作?

      1、点点点(鼠标操作:单击、双击、拖拽、悬停)

      2、用户输入(文本框、单选、多选、下拉框选择)

      3、控件操作(如日期)、文件上传

      4、验证码(让开发关闭验证,设置固定验证码)

      5、窗口滚动。

      各式各样的浏览器操作工具如,selenium,cypress,playwright,pupeter,其封装浏览器的操作都是类似的。

    7.1、鼠标操作

      ActinoChains类来实现。流程举例:(1)ac = ActinoChains(driver) (2)定位元素elem =driver.find_element('xpath','//h2')(3)操作 ac.click(elem).perform()

      1、单击,有两种方式来实现。

       简单版:(1)定位元素,elem =driver.find_element('xpath','//h2')(3)elem.click()

       复杂版:(1)ac = ActinoChains(driver) (2)定位元素,elem =driver.find_element('xpath','//h2')(3)操作 ac.click(elem).perform()

       说明:简单版虽简单但是功能单一,只能做单击。复杂版功能强大如将ac.click(elem).perform()中的click(elem)可替换成别的操作如双击    

       ac.double_click(elem).perform(),换成什么就是什么操作。

      2、双击 ac.double_click(elem).perform()

      3、右击 ac.context_click(elem).perform()

      4、移动(悬停) ac.move_to_element(elem).perform()     例子:百度首页:设置--》高级设置

      5、拖拽 ac.drag_to_drop(elem1,elem2).perform()

      6、连续操作:ac.move_to_element(setting).click(adv_setting).drag_and_drop().context_click().perform() # 可以任意加,只要最后有.perform()即可。

    7.2、选择select下拉框

           

      这种下拉框用的比较少了,但是有的在用,现在更多用的是新的一些框架用这个div元素去加载的。

      有两种方式可能操作select下拉框:

      方式一:也是最简单的方式,直接去定位option,点击即可(此种方式所有类型下拉框通用):

      driver.find_element('xpath','//option[text()="吃"]')

      注:因为现在很多很多框架虽然不在用select元素去代表下拉框,比如vue.js(中国人写的风靡全球一个框架)写的前端,例如下面这个下拉框,就是普通的文本  

      框+选项列表组成,但是它的展示实现起来会通过一些css样式让它看起来像是select元素,实际上根本不是。像这种与定位。一样的先找你你要点击的元素(点

      开下拉,鼠标放置选项上右击检查元素)点击即可。所以下拉弹不管是不是select元素都是可以通过点击取操作。

          

         

       方式二:仅适用select下拉框,了解即可,即先找到select元素,再把元素对象传入Select

      from selenium.webdriver.support.select import Select

      s = driver.find_element('id','myselect'.)

      s_obj = Select(s)

      s_obj.选一种定位方式即可。

      

    7.3、键盘输入

    • Keys 类
    • send_keys()
    • enter 回车
    • 右移光标
    • ctrl +a ,全选
    • ctrl +c 复制
    • ctrl +v 粘帖

      以百度搜索为例子,提交的三种方式:

      ......

      driver.get('http://www.baidu.com')

      input = driver.find_element('id','kw')

      input.send.send_keys('NBA')

      方式一、找到"百度一下"这个按钮,点击元素。此种为万能方式。

      方式二、如果该元素在form表单下,可以以submit()实现提交,如果不在form表单下则不能用这种方式。

           input.submit()

      方式三、触发键盘上的回车健。如果前端没有做回车提交,这种方式也不了。

      from selenium.webdirver.common.keys import Keys

      input.send_keys(Keys.ENTER)

      # 也可传多个参数

      input.send_keys(Keys.CONTROL,Keys.SPACE)

      以上是在元素上的操作,下面是全局操作:

      from selenium.webdriver  import ActionChains

      from selenium.webdirver.common.keys import Keys

      ac = ActionChains()

           ac.send_keys(Keys.CONTROL).perform()

    7.4、js脚本

      所有python代码、所有selenium指令比如找元素,发送按键最终都是会传给webdirver驱动(转换成js代码),通过webdriver控制浏览器,webdriver为什么可         以控制浏览器,是因为浏览器中内置js解释器(也就是说浏览器可随便宜运行js代码),所以不管学的是什么语言python、java、php也好总之你想控制浏览器         到目前为止是绕不开js(javascript)的。学js目的以防成万一,什么意思呢,因为现在所写的python指令最终都会转化成js代码,所以可以理解成selenium是           对js指令的封装(转了一些转换转换成了python语言),但selenium只封装了部分浏览器操作,当你发现有一些操作用seleniuim玩不成的话,此时就可以直接         发送js代码执行,你就可以调用这样的代码driver.execute_script()表示执行js指令。例如:js_code ="return document"    ,driver.execute_script(js_code)

      1、有哪些指令在selenium在不存在?

      (1)如修改元素的属性(比如修改readonly、disable属性等)

      (2)窗口的滚动

       ......

      2、写js代码,有两种方式:

      (1)可以直接在浏览器console(控制台)中写,如下图

             

      (2)写在html代码文件中,下面这些代码在自动化测试中用不到,只需要知道有这种机制就可以了,自动化测试要学的是哪些js呢?即,dom对象。  

      
      
      
      
       Title
      
      

      
      
      

      
      

    hello world



       <script>
      
      
      
      
      
      
      

      
      function myAlert(){
      let name ='david';
      if (name=='chenglong'){
       alert('成龙')
      }else{
       alert('david')
       }
       }
      
      
      </script>

      
      

             

       3、js常用指令

      (1)打印,有两种方式实现打印 console.long()、alter()后者也是打印,只是把要打印的内容以弹框的形式弹出来。不管什么语言先要学的就是打印,因为可

        以帮助调试代码。

      (2)定义变量 var name = 'helloworld' ,现在已不太用这种方式定义js里的变量了。let name ='helloworld' 这是js新的定义变量的标准。

      (3)数据类型,let  name = "helloworld" ,name = 123 ,name = true(注意是小写的),name = [1,2,3] ,name = {"name":"david"}

      (4)条件语句

        if(age>18){
        alert("已经成年");
        }else if(age==18){
        alert("要成年了")
        }else{
        alert("未成年")
        }

               

         (5)for、while循环自动化测试用的不多。可以去菜鸟教程学习,https://www.runoob.com/js/js-tutorial.html

      (6)函数,function

               

      4、dom 对象,重点

      之前做过js 跟python的对比,用法是差不多的。python里什么东西都可以用类和对象来表示,比如selenium访问浏览器对象Chrome()、FireFox(),同时在jsi当中

      它也可以用类和对象的方式去表示所有的情况,但是js里的类和对象有一个非常特殊存在,特殊在哪里,即js的解释器集成在浏览器当中。那么这个特殊之处就

      会引发一系列连锁的反应,当我们打开任意界面的时候,js就会自动的把你打开的界面窗口封装成一个对象。打开一个html页面,它的源代码是由html文档构

      成,hmtl文档其实就是一些文字本质跟python里的字符串一回事,js就做了一些事情,即你打开这个文档以后会把它转化成js里对象,整个窗口包含标题存放到  

      叫window的对象里面,window下有各种属性和方法是可以调用的。还有一个文档,这个文档是窗口里的一部分,叫做document,整体页面上的内容保存在

      document对象里,document对象里也有各种属性比如url可调用,document.body,document.url就能获取对应的属性,所以打开任意界面都帮助我们封装成js对

      象了,既然封装成对象了,那么想去操作页面、窗口,我们通过代码的方式怎么操作呢?  

      (1)通过代码方式如何去操作对象(document、window对象),即通过方法和属性两种方式。

        -属性:获取属性、修改属性。

        -方法:获取方法、修改属性。

          

              

             

        

      所以任何的网页面上任何的东西都可以通过js去控制,不管什么样的操作你想在selenium中如果你不知道怎么玩的在python中它实现不了的,就可以发送对应的js指令直接让前端的js代码去修改或操作浏览器,之后如果想深入研究ui自动化内容就要深入研究js,学的越深做UI自动化越得心应手。以上可知通过方法和属性都可以修改页面,那么这个页面和dom关键字有什么关联没有? 

       (2)什么是dom 对象

      DOM(DOM—Document Object Model)是W3C国际组织的一套Web标准。它定义了访问HTML文档对象的一套属性、方法和事件。DOM是以层次结构组织的节点或信息片断的集合。文档对象模型(Document Object Model)是给HTML与XML文件使用的一组API。DOM的本质是建立网页与脚本语言或程序语言沟通的桥梁。

      dom就是可它可以把一个html(docoment)变成一个对象,也就是整体html就是一个对象,html标签它也是个对象但是可以通过属性的方式去获取,即docment.getRootNode()、document.body、document.head......所以在整个页面所以的都是对象(标签是对象,属性也是对象、文本也是对象......这跟python是类似的一切皆对象)。

      总之,在自动化测试里边对dom的理解就基本上等同于对docement这个对象的操作,

      

      (3)js具体应用场景

      

       

    7.5、窗口滚动

    7.6、文件上传

     

      

     

      

     

    相关