zoukankan      html  css  js  c++  java
  • webdriver

    1、第一个自动化测试脚本

    # 第一个自动化测试脚本
    
    from selenium import webdriver
    from time import sleep
    
    # 加载浏览器驱动
    driver = webdriver.Firefox()
    
    # 打开163邮箱页面
    driver.get("https://mail.163.com/")
    print(driver.title)
    sleep(3)
    
    # 打开百度首页
    driver.get("http://www.baidu.com")
    print(driver.title)
    sleep(3)
    
    # 关闭浏览器
    driver.quit()
    

     2、浏览器操作脚本

    '''
    浏览器操作
    浏览器窗口大小设置
    页面前进后退
    页面刷新
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get('http://www.baid.com')
    # 窗口最大化
    driver.maximize_window()
    sleep(2)
    
    driver.get("http://www.baidu.com")
    # 自定义出口大小
    driver.set_window_size(400, 800)
    # 窗口刷新
    driver.refresh()
    sleep(2)
    
    # 回退
    driver.back()
    sleep(2)
    
    # 前进
    driver.forward()
    sleep(2)
    
    # 退出
    driver.quit()
    

     3、元素定位

    元素定位
    元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。
    webdriver提供了一系列的元素定位方法,常用的有:
    id、name、class name、link text、partial link text、tag name、xpath、css selector

    (1)、id和name定位

    '''
    元素定位
    元素的定位应该是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。
    webdriver提供了一系列的元素定位方法,常用的有:
    id、name、class name、link text、partial link text、tag name、xpath、css selector
    
    打开百度首页,在搜索框自动输入"selenium"关键词,然后点击搜索按钮,查看搜索页面
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_id('kw').send_keys("selenium")
    driver.find_element_by_name('wd').send_keys("加油")
    sleep(2)
    
    driver.find_element_by_id('su').click()
    

     (2)、tag name定位

    '''
    元素定位之tag name
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    #定位标签名为input的元素
    driver.find_element_by_tag_name('input').send_keys('selenium')
    
    #获取页面所有标签名为input的标签
    driver.find_elements_by_tag_name('input')[0].send_keys('selenium')
    
    sleep(3)
    
    driver.quit()
    

     (3)、class name定位

    '''
    元素定位之class name
    根据标签中属性class来进行定位的一种方法
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_class_name('s_ipt').send_keys('selenium')
    
    driver.find_element_by_id('su').click()
    
    sleep(2)
    
    driver.quit()
    

     (4)、link text定位

    '''
    元素定位之link text
    link_text定位就是根据超链接文字进行定位
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get('http://www.baidu.com')
    driver.find_element_by_link_text('新闻').click()
    sleep(3)
    
    driver.find_element_by_partial_link_text('新').click()
    sleep(2)
    
    driver.quit()
    

     (5)、XPath定位

    XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。
    XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

    绝对定位和相对定位

    '''
    元素定位之xpath
    XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。
    XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力
    绝对定位和相对定位
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get('http://www.baidu.com')
    
    #绝对路径定位
    driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('selenium')
    
    #相对定位
    #利用元素属性定位  定位到input标签中为kw的元素
    driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
    
    #定位input标签中name属性为的wd元素
    driver.find_element_by_xpath("//input[@name='wd']").send_keys('selenium')
    
    #定位所有标签元素中,class属性为s_ipt的元素
    driver.find_element_by_xpath(("//*[@class='s_pt']")).send_keys('Python')
    
    driver.find_element_by_id('su').click()
    sleep(3)
    
    driver.quit()
    

     层级与逻辑组合定位

    '''
    元素定位之xpath
    层级与逻辑定位
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get('http://www.baidu.com')
    
    # 层级和属性结合定位  输入用户名和密码
    driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[1]").send_keys('selenium')
    driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[2]").send_keys('123456')
    sleep(3)
    
    # 逻辑运算组合定位
    driver.find_element_by_xpath("//input[@class='loinp' and @name='username']").send_keys('selenium')
    sleep(2)
    
    driver.quit()
    

    (6)、css定位

     selenium极力推荐使用CSS定位,而不是xpath来定位元素,原因是css定位比xpath定位速度快,语法也更加简洁

    css常用定位方法:
    find_element_by_css_selector()
    #id id选择器根据id属性来定位元素
    .class class选择器根据class属性值来定位元素
    [attribute='value']根据属性来定位元素
    element>element 根据元素层级来定位 父元素>子元素

    '''
    元素定位之css
    selenium极力推荐使用CSS定位,而不是xpath来定位元素,原因是css定位比xpath定位速度快,语法也更加简洁
    css常用定位方法:
    find_element_by_css_selector()
    1、#id id选择器根据id属性来定位元素
    2、.class class选择器根据class属性值来定位元素
    3、[attribute='value']根据属性来定位元素
    4、element>element 根据元素层级来定位 父元素>子元素
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get("http://www.baidu.com")
    
    # 根据id来定位
    driver.find_element_by_css_selector('#kw').send_keys('selenium')
    sleep(3)
    
    # 根据class定位
    driver.find_element_by_css_selector('.s_ipt').send_keys('selenium')
    sleep(3)
    
    # 通过属性定位
    driver.find_element_by_css_selector("[autocomplete='off']").send_keys("selenium")
    sleep(3)
    driver.find_element_by_id('su').click()
    sleep(2)
    
    # 通过元素层级定位
    driver.find_element_by_css_selector("form#loginForm>ul>input").send_keys('selenium')
    driver.find_element_by_css_selector("form#loginForm>ul>input[type='password']").send_keys('selenium')
    
    driver.quit()
    

     (7)、下拉菜单选项定位

    根据选项元素标签定位

    '''
    元素定位之下拉菜单元素定位
    1、根据选项元素标签定位
    在我要自学网登录页面选择指定的保留时间
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get('http://www.zxw.net')
    sleep(1)
    
    # 根据option标签定位
    driver.find_element_by_tag_name('option')[1].click()
    driver.find_element_by_css_selector('[value="1"]').click()
    sleep(2)
    
    driver.quit()
    

     使用Select类定位

    '''
    元素定位之下拉菜单元素定位
    2、使用Select类定位
    '''
    
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.support.ui import Select
    
    driver = webdriver.Firefox()
    driver.get("http://www.zxw.net")
    sleep(2)
    
    # 利用Select类来进行定位
    select = Select(driver.find_element_by_css_selector("[name='CookieDate]"))
    
    select.select_by_index(2)
    select.select_by_visible_text('留一年')
    select.select_by_value("1")
    sleep(2)
    
    driver.quit()
    

     4、鼠标操作

    鼠标操作
    实现思路:
    需要引入ActionChains类
    然后定位相关元素
    在ActionChains().调用相关鼠标操作方法

    '''
    鼠标操作
    实现思路:
    需要引入ActionChains类
    然后定位相关元素
    在ActionChains().调用相关鼠标操作方法
    '''
    
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    driver.maximize_window()
    
    driver.find_element_by_css_selector("#kw").send_keys('python')
    
    # 获取搜索框元素对象
    element = driver.find_element_by_css_selector("#kw")
    sleep(3)
    
    # 双击操作
    ActionChains(driver).double_click(element).perform()
    sleep(2)
    
    # 右击操作
    ActionChains(driver).context_click(element).perform()
    sleep(3)
    
    # 鼠标悬停
    above = driver.find_element_by_css_selector(".pf")
    ActionChains(driver).move_to_element(above).perform()
    sleep(2)
    
    driver.quit()
    

     5、键盘操作

    '''
    键盘操作
    在百度搜索关键词python,然后将关键词复制或剪切到搜狗搜索框进行搜索
    '''
    
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    driver.find_element_by_css_selector("#kw").send_keys("python")
    sleep(2)
    
    # 键盘全选操作Ctrl+a
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'a')
    
    # 键盘选择复制或剪切操作Ctrl+c、Ctrl+x
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'c')
    driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'x')
    
    # 打开搜狗页面
    driver.get("http://www.sogou.com")
    sleep(2)
    
    # 粘贴复制内容
    driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL, 'v')
    sleep(2)
    
    # 点击搜索按钮
    driver.find_element_by_xpath("//input[@id='stb]").click()
    driver.find_element_by_css_selector("#stb").click()
    
    sleep(3)
    driver.quit()
    

     6、元素等待

    显示等待

    '''
    元素等待
    概念:
    显示等待是针对某一个元素进行相关等待判定
    隐式等待不针对某一元素进行等待,全局元素等待
    相关模块:
    WebDriverWait显示等待针对元素必用
    expected_conditions预期条件类(里面包含方法可以调用,用于显示等待)
    NoSuchElementException用于隐式等待抛出异常
    By用于元素定位
    案例:检测百度页面搜索按钮是否存在,存在就输入关键词"selenium"然后点击
    '''
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    sleep(2)
    
    driver.find_element_by_css_selector("#kw").send_keys("selenium")
    
    element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))
    element.click()
    
    sleep(3)
    driver.quit()
    

    隐式等待

    '''
    隐式等待
    '''
    
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import sleep, ctime
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    sleep(2)
    
    # 隐式等待时间设定5秒
    driver.implicitly_wait(5)
    
    # 检测搜索框是否存在
    try:
        print(ctime())
        driver.find_element_by_css_selector("#kw").send_keys("python")
        driver.find_element_by_css_selector("#su").click()
    except NoSuchElementException as msg:
        print(msg)
    finally:
        print(ctime())
    
    sleep(3)
    driver.quit()
    

     7、嵌套页面元素定位

    frame.html

    <html>
    <title>Frame Test</title>
    <body>
    	<div>
    		<iframe id="search" src="http://www.sogou.com" width="800" height="500"></iframe>
    	</div>	
    </body>
    </html>
    
    '''
    frame嵌套页面元素定位
    案例:在frame.html文件中定位搜狗搜索页面,进行搜索操作
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    # 设置网页文件路径,r代表路径转义
    file_path = r"E:pythonwebdriverframe.html"
    driver.get(file_path)
    
    # 切换到frame页面内
    driver.switch_to.frame("search")
    
    # 定位到搜索框按钮输入关键词
    driver.find_element_by_css_selector("#query").send_keys("python")
    sleep(2)
    
    driver.find_element_by_css_selector("#stb").click()
    sleep(2)
    
    driver.quit()
    

     8、多窗口切换

    '''
    多窗口切换操作
    案例:打开我要自学网seleniu课程主页,然后打开2-1课程详情页面,再回到课程主页打开3-1课程详情页面
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    
    driver.get("http://www.zxw.net")
    
    # 获取课程主页打窗口句柄
    selenium_index = driver.current_window_handle
    sleep(2)
    
    # 点击2-1课程链接,进入课程详情页面
    driver.find_element_by_partial_link_text("2-1").click()
    sleep(3)
    
    # 跳转到课程主页窗口,点击3-1课程
    driver.switch_to.window(selenium_index)
    sleep(3)
    driver.find_element_by_partial_link_text("3-1").click()
    sleep(3)
    
    driver.quit()
    

     9、警告弹窗处理

    '''
    警告弹窗处理
    案例:点击百度首页设置按钮,然后保存弹出警告窗口进行相关处理
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_link_text("设置").click()
    sleep(2)
    
    driver.find_element_by_link_text("搜索设置").click()
    sleep()
    
    driver.find_element_by_link_text("保存设置").click()
    driver.find_element_by_link_text("恢复默认").click()
    
    alert = driver.switch_to.alert()
    
    alert.accept()
    sleep(2)
    
    driver.quit()
    

     10、上传文件

    '''
    上传文件
    案例:在百度搜索上传本地图片进行搜索
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_css_selector(".soutu-btn").click()
    sleep(3)
    
    driver.find_element_by_css_selector(".upload-pic").send_keys(r"E:pythonshuiyin.png")
    
    sleep(3)
    driver.quit()
    

     11、浏览器滚动条操作

    '''
    滚动条控制操作
    案例:打开我要自学网页面,然后将滚动条拖到最底部,再拖到顶部
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.zxw.net")
    
    #将滚动条拖到最底部
    js = "var action=document.documentElement.scrollTop=10000"
    driver.execute_script(js)
    sleep(2)
    
    #将滚动条拖到最顶部
    js = "var action=document.documentElement.scrollTop=0"
    driver.execute_script(js)
    sleep(2)
    
    driver.quit()
    

     12、网页自动截图

    '''
    网页自动截图
    案例:分别打开我要自学网页面和百度页面,然后进行截图
    '''
    
    from selenium import webdriver
    from time import sleep
    
    # 加载浏览器驱动
    driver = webdriver.Firefox()
    
    # 打开我要自学网页面并截图
    driver.get("http://www.zxw.net")
    driver.get_screenshot_as_file(r"E:pythonzxw.jpg")
    sleep(2)
    
    # 打开百度页面并截图
    driver.get("http://www.baidu.com")
    driver.get_screenshot_as_file(r"E:pyhonaidu.jpg")
    sleep(2)
    
    driver.quit()
    

     13、Cookie处理

    '''
    Cookie处理
    Cookie是存储在用户本地终端上的数据,实际上是一小段的文本信息
    Cookie的作用是帮助Web站点保存有关访问者的信息,方便用户的访问。如记住用户名密码实现自动登录
    '''
    
    from selenium import webdriver
    from time import sleep
    
    # 加载浏览器驱动
    driver = webdriver.Firefox()
    
    driver.get("http://www.zxw.net")
    
    # 获取Cookie信息
    cookie = driver.get_cookie()
    print(cookie)
    print(cookie[0])
    sleep(3)
    
    # 添加Cookie信息
    driver.add_cookie({"name": "test", "value": "jiayou"})
    for cookie in driver.get_cookie():
        print("%s--%s" % (cookie['name'], cookie['value']))
    
    driver.quit()
    

     14、基于Cookie绕过验证码自动登录

    '''
    基于Cookie绕过验证码自动登录
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    # 手动添加cookie
    driver.add_cookie({'name': 'BAIDUID', 'value': 'aaaaaaaaaa'})
    driver.add_cookie({'name': 'BDUSS', 'value': 'bbbbbbbbbbb'})
    
    sleep(2)
    driver.refresh()
    sleep(3)
    
    driver.quit()
    
  • 相关阅读:
    linux 图形界面形式和命令行形式
    linux 配置 jdk7
    StackOverflowError
    一次失败的svchost hacking
    VB调用API的学习
    植物打僵尸休闲花园外挂代码
    中文日文翻译工具
    vb跨域访问,获得特定的frame进行处理
    HTML对象库简介(Microsoft HTML Object Library > mshtml.tlb)
    用正则分析一段vb代码含有哪些过程或者函数
  • 原文地址:https://www.cnblogs.com/xidian2014/p/10420750.html
Copyright © 2011-2022 走看看