selenium自动化初级

selenium1. 介绍自动化2. selenium环境搭建3. WebDriver元素定位3.1 id定位3.2 name定位3.3 class_name定位3.4 tag_name定位3.5 link_text定位3.6 partial_link_text定位3.7 find_element[s]_by_XXX()3.8 Xpath定位3.9 CSS定位4. 元素操作4.1 常用操作4.2 浏览器常用方法4.3 WebDriver其它常用方法

selenium

1. 介绍自动化

  • web自动化:selenium、robot framework

  • App端自动化测试:Appium、Monkey

  • 接口:Jmeter、Postman、httpUnit、RESTClient

2. selenium环境搭建

  • python:下载python安装

  • 下载WebDriver,可以去淘宝镜像下载,最好安装在python目录下,不需要单独配置环境变量

  • pip install selenium

3. WebDriver元素定位

  • 定位方式8种:

    1). id、name、class_name:为元素属性定位
    2). tag_name:为元素标签名称
    3). link_text、partial_link_text:为超链接定位(a标签)
    4). Xpath:为元素路径定位
    5). Css:为CSS选择器定位

  • Webdriver代码格式:

    from selenium import webdriver # 导入库
    driver = web driver.Chrome() # 打开浏览器
    driver.get('url') # 填写http地址
    driver.find_element_by_id("").send_keys("") # 做操作
    driver.close() # 关闭当前页
    driver.quit() # 关闭浏览器

3.1 id定位
  • 说明:

    • id属性在HTML文档种必须是唯一的
  • 方式:

    • find_element_by_id()
3.2 name定位
  • 说明:

    • HTML规定name属性来指定元素名称,因此它的作用更像人名,name的属性值在当前文档中可以不是唯一的
  • 定位方法:

    • find_element_by_name()
3.3 class_name定位
  • 说明:

    • HTML规定了class来指定元素的类名,用法和name、id类似;
  • 定位方法:

    • find_element_by_class_name()
  • 注意:

    • HTML的class元素里的名称如果用空格分隔,代表多个类名,写其中一个就行
3.4 tag_name定位
  • 说明:

    • HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一类,所以tag定位效率低,
      一般不建议使用;tag_name定位就是通过标签名来定位;
  • 定位方法:

    • find_element_by_tag_name()

      返回的符合条件的第一个标签

    • 如何获取第二个元素?

3.5 link_text定位
  • 说明:

    • 专门定位超链接文本(<a>标签</a>)
  • 方法:

    • find_element_by_link_text()

      需要传入a标签全部文本

      定位后可以通过 .click() 来进行点击操作

3.6 partial_link_text定位
  • 说明:

    • partial_link_text定位是对link_text定位的补充,partial_like_text为模糊匹配;link_text全部匹配
  • 方法:

    • find_element_by_partial_link_text()

      传入a标签局部文本

3.7 find_element[s]_by_XXX()
  • element加了s

  • 作用:

    • 1. 查找定位所有符合条件的元素
      2. 返回的定位元素格式为数组(列表)格式;
      说明:
      2.1 列表数据格式的读取需要指定下标(下标从0开始)
  • 例子

    • 使用tag_name获取第二个元素(密码框)

      driver.find_elements_by_tag_name("input")[1].send_keys("123456")
3.8 Xpath定位
  • Xpath和CSS定位可以解决,项目中没有id、name、class属性,或者id、name、class属性值为动态获取,随着刷新或加载而变化

  • 方法

    • driver.find_element_by_xpath()
  • Xpath定位方式

    • 路径-定位:绝对路径、相对路径

      • 绝对路径:从最外层元素到指定元素之间所有经过元素层级路径

        • 绝对路径以 ‘/’开始
      • 相对路径:从第一个符合条件元素开始(一般配合属性来区分)

        • 相对路径以‘//’开始
    • 利用元素等级定位

      • 利用元素的唯一属性定位 ://*[@id='userA']
    • 层级与属性结合

      • 要找的元素没有属性,但是它的父级有://*[@id='p1']/input
    • 属性与逻辑结合

      • 解决元素之间个相同属性重名的问题://*[@id='telA' and @class='telA']
    • //[text()="xxx"] 文本内容是xxx的元素
      //
      [starts-with(@attribute,'xxx')] 属性以xxx开头的元素
      //*[contains(@attribute,'Sxxx')] 属性中含有xxx的元素

3.9 CSS定位
  • CSS定位速度Xpath要快

  • CSS定位方法

    • driver.find_element_by_css_selector()
  • 方式

    • id选择器

      • 说明:根据元素id属性来选择
        格式:#id 如:#userA <选择id属性值为userA的所有元素>
    • class选择器

      • 说明:根据元素class属性来选择
        格式:.class 如:.telA <选择class属性值为telA的所有元素>
    • 元素选择器

      • 说明:根据元素的标签名选择
        格式:element 如:input <选择所有input元素>
    • 属性选择器

      • 说明:根据元素的属性名和值来选择
        格式:[attribute=value] 如:[type="password"] <选择所有type属性值为password的值>
    • 层级选择器

      • 说明:根据元素的父子关系来选择
        格式:element>element 如:p>input <返回所有p元素下所有的input元素>
        提示:> 可以用空格代替 如:p input 或者 p [type='password']
    • 1. input[type^='p'] 说明:type属性以p字母开头的元素
      2. input[type$='d'] 说明:type属性以d字母结束的元素
      3. input[type*='w'] 说明:type属性包含w字母的元素

  • CSS功能

  • 选择器 例子 描述
    #id #userA id选择器,选择id="userA"的所有元素
    .class .telA class选择器,选择class="telA"的所有元素
    element input 选择所有input元素
    [attribute=value] [type="password"] 选择type="password"的所有元素
    element>element p>input 选择所有父元素为p元素的input元素
  • XPath与CSS类似功能对比

    定位方式 XPath CSS
    元素名 //input input
    id //input[@id='userA'] #userA
    class //*[@class='telA'] .telA
    属性 1. //※[text()="xxx"] 2. //※[starts-with(@attribute,'xxx')] 3. //※[contains(@attribute,'xxx')] 1. input[type^='p'] 2. input[type$='d'] 3. input[type*='w']

4. 元素操作

4.1 常用操作
  • clear():清除文本 一般清除input输入的值

  • send_keys:模拟输入

  • click():单击元素

4.2 浏览器常用方法

1. maximize_window() 最大化 --> 模拟浏览器最大化按钮
2. set_window_size(100,100) 浏览器大小 --> 设置浏览器宽、高(像素点)
3. set_window_position(300,200) 浏览器位置 --> 设置浏览器位置
4. back() 后退 --> 模拟浏览器后退按钮
5. forward() 前进 --> 模拟浏览器前进按钮
6. refresh() 刷新 --> 模拟浏览器F5刷新
7. close() 关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
8. quit() 关闭 --> 关闭所有WebDriver启动的窗口

4.3 WebDriver其它常用方法

1. size 返回元素大小
2. text 获取元素的文本
3. title 获取页面title
4. current_url 获取当前页面URL
5. get_attribute() 获取属性值
6. is_display() 判断元素是否可见
7. is_enabled() 判断元素是否可用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351