day14-测试自动化之Selenium的元素操作、浏览器操作等

一、元素操作

        1.1.为什么要学习操作元素的方法?

                1).需要让脚本模拟用户给指定元素输入值

                2).需要让脚本模拟人为删除元素的内容

                3).需要让脚本模拟点击操作

        1.2.元素常用操作方法

                1).click()点击方法

                2).send_keys(value) 输入方法

                3).clear() 清空方法

        1.3.提示

                1).在输入方法之前,要进行清空操作

        1.4.代码

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 百度搜索框 输入内容
    driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("美团招聘")
    # 点击百度一下按钮 进行搜索
    driver.find_element(By.CSS_SELECTOR, "#su").click()

    # 睡眠3秒钟
    sleep(3)

    # 百度搜索框 清空内容
    driver.find_element(By.CSS_SELECTOR, "#kw").clear()
    # 百度搜索框 输入内容
    driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("腾讯招聘")
    # 点击百度一下按钮 进行搜索
    driver.find_element(By.CSS_SELECTOR, "#su").click()

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

二、浏览器常用的操作API

        2.1.常用方法

                1).maximize_window()最大化浏览器窗口--->模拟浏览器最大化按钮

                2).set_window_size(width,height)设置浏览器窗口大小--->设置浏览器宽、高(像素点)

                3).set_window_position(x,y)设置浏览器窗口位置--->设置浏览器位置

                4).set_window_rect(x,y,width,height)设置浏览器窗口位置和窗口大小---->set_window_size和set_window_position的并集

                5).back()后退---->模拟浏览器后退按钮

                6).forward()前进-->模拟浏览器前进按钮

                7).refresh()刷新-->模拟浏览器F5刷新

                8).close()关闭当前窗口-->模拟点击浏览器关闭按钮

                9).quit()关闭浏览器驱动对象-->关闭所有程序启动的窗口

                10).title获取页面title

                11).current_ur获取当前页面URL

        2.2.提示

                1).driver.title和driver.current_url没有括号,应用场景:一般为判断上步操作是否执行成功

                2).driver.maximize_windowO一般为前置代码,在获取driver后,直接编写最大化浏览器

                3).dirver.refreshO应用场景:cookie会使用到

                4).dirver.close0与driver.quitO的区别

                        1.close():关闭当前窗口

                        2.quit():关闭由driver对象启动的所有窗口

        2.3.代码

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # # 设置浏览器窗口大小为 400,400
    # driver.set_window_size(400,400)
    #
    # # 设置浏览器窗口位置在左上角
    # driver.set_window_position(-100,100)
    # 两者结合
    # driver.set_window_rect(-100,100,400,400)

    # # 暂停三秒钟
    # sleep(3)

    # 最大化浏览器
    driver.maximize_window()

    # 百度搜索框 输入内容
    driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("美团招聘")
    # 百度一下按钮 进行搜索
    driver.find_element(By.CSS_SELECTOR, "#su").click()

    # 睡眠3秒钟
    sleep(3)

    # 后退到前一页
    driver.back()

    # 获取当前页面标题和url
    print(driver.title)
    print(driver.current_url)

    # 暂停三秒钟
    sleep(3)

    # 前进到前一页
    driver.forward()

    # 暂停三秒钟
    sleep(3)

    # 刷新页面
    driver.refresh()

    # 暂停三秒钟
    sleep(3)

    # 后退到前一页
    driver.back()

    # 打开新闻
    driver.find_element(By.CSS_SELECTOR, ".mnav.c-font-normal.c-color-t").click()

    # 暂停三秒钟
    sleep(3)

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

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

三、获取元素信息

        3.1.为什么要获取元素信息?

                1).获取元素的文本

                2).获取元素属性值

                3).判断当前元素是不是为可见状态

        3.2.获取元素信息常用方法

                1).size  返回元素大小

                2).text 获取元素的文本

                3).get_attribute("xxx")获取属性值,传递的参数为元素的属性名

                4).is_displayed()判断元素是否可见

                5).is_enabled()判断元素是否可用

                6).is_selected()判断元素是否选中,用来检查复选框或单选框是否被选中

        3.3.提示

                1).size、text:为属性,调用时无括号;如:xxx.size

                2).get_attribute一般应用场景:判断一组元素是否为想要的元素或者判断元素属性值是否正确

                3).is_displayed、is_enabled、is_selected 在特殊场景使用

        3.4.代码

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://ssl.zc.qq.com/v3/index-chs.html?type=0")

    # 输出欢迎注册QQ的文本
    print(driver.find_element(By.CSS_SELECTOR, "div[data-bind='visible: isQQ() || isQQMail() || isMail()'] div:nth-child(1)").text)

    # 输出昵称框的大小
    print(driver.find_element(By.CSS_SELECTOR, "#nickname").size)

    # 判断密码框是否可用
    # class ="password error"
    print(driver.find_element(By.CSS_SELECTOR, "#password").get_attribute("class"))

    # 判断用户协议是否被选中
    print(driver.find_element(By.CSS_SELECTOR,"#agree").is_selected())

    # 判断密码框是否可见
    print(driver.find_element(By.CSS_SELECTOR, "#password").is_displayed())

    # 判断密码框是否可用
    print(driver.find_element(By.CSS_SELECTOR, "#password").is_enabled())

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

四、鼠标操作

        4.1.为什么要操作鼠标?

                1).现在Web产品中存在丰富的鼠标交互方式,作为一个web自动化测试框架,需要应对这些鼠标操作的应用场景

        4.2.鼠标操作的方法

                1).说明:在Selenium中将操作鼠标的方法封装在ActionChains类中

                2).实例化对象:action=ActionChains(driver)

                3).方法

                        3.1).context_click(element)右击--->模拟鼠标右键点击效果

                        3.2).double_click(element)双击--->模拟鼠标双击效果

                        3.3).drag_and_drop(source,target)拖动--->模拟鼠标拖动效果(移动端测试比较常用)

                        3.4).move_to_element(element)悬停--->模拟鼠标悬停效果

                        3.5).perform()执行--->此方法用来执行以上所有鼠标操作

                                1.说明:在ActionChains类中所有提供的鼠标事件方法,在调用的时侯所有的行为都存储在ActionChains对象中,而performO方法就是真正去执行所有的鼠标事件

                                2.强调:必须调用performO方法才能执行鼠标事件

        4.3.提示

                1).selenium框架中虽然提供了,右击鼠标方法,但是没有提供选择右击菜单的方法,可以通过发送快捷键的方式解决 (经测试,谷歌浏览器不支持)。

                2).鼠标操作方法:必须调用preform()才能执行

        4.4.代码


# 导包
from selenium import webdriver
from time import sleep

from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # # 打开页面
    # driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
    #
    # # 实例化鼠标对象
    # action = ActionChains(driver)
    #
    # # 定位账号框右键,预期结果 出现选择
    # action.context_click(driver.find_element(By.XPATH,"//*[@id='nickname']"))
    #
    # # 执行鼠标操作
    # action.perform()
    #
    # # 睡眠2秒钟
    # sleep(2)
    #
    # # 发送用户名 admin 并进行双击,预期结果:选中admin
    # action.double_click(driver.find_element(By.XPATH,"//*[@id='nickname']").send_keys("admin"))
    #
    # # 执行鼠标操作
    # action.perform()
    #
    # # 睡眠2秒钟
    # sleep(2)
    #
    # # 移动到在“简体中文”,出现提示框
    # action.move_to_element(driver.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/div/div/div[2]/div/div/div[1]/span"))
    #
    # # 执行鼠标操作
    # action.perform()
    #
    # # 睡眠2秒钟
    # sleep(2)
    #
    # # 关闭浏览器
    # driver.quit()

    # 打开网页
    driver.get("https://ad.shenshiads.com/?bd_vid=11692342316616849961")

    # 实例化鼠标对象
    actions = ActionChains(driver)

    # 定位到可拖动的东西并进行拖动(此方法通过坐标偏移量执行)
    actions.drag_and_drop_by_offset(driver.find_element(By.XPATH,"//*[@id='aff-im-root']/div[2]/div/div/div[1]"),xoffset=200,yoffset=180).perform()


if __name__ == '__main__':
    main()

五、键盘操作

        5.1.说明

                1).模拟键盘上一些3按键或者组合键的输入如:Ctrl+C、Ctrl+V

                2).selenium中把键盘的按键都封装在Keys类中

        5.2.Keys类

                1).导包:From selenium.webdriver.common.keys import Keys

        5.3.常用的键盘操作

                1).send_keys(Keys.BACK_SPACE)删除键(BackSpace)

                2).send_keys(Keys.SPACE)空格键(Space)

                3).send_keys(Keys.TAB)制表键(Tab)

                4).send_keys(Keys.ESCAPE)回退键(Esc)

                5).send_keys(Keys.ENTER)回车键 (Enter)

                6).send_keys (Keys.CONTROL,'a)全选 (Ctrl+A)

                7).send_keys (KeyS.CONTROL,'c)复制(Ctr1+C)

        5.4.提示

                1).单键:send_keys(Keys.XXXX)

                2).组合键:send_keys(KeyS.XXXX,'x)

        5.5.代码

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common import keys
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)

def main():
    # 打开页面
    driver.get("https://ssl.zc.qq.com/v3/index-chs.html?type=0")

    # 昵称框输入admin1
    driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("admin1")

    # 暂停三秒钟
    sleep(3)

    # 昵称框删除 1 执行一次删除键(相当于敲了一次)
    driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(Keys.BACK_SPACE)

    # 暂停三秒钟
    sleep(3)

    # 昵称框全选 ctrl+a
    driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys(Keys.CONTROL,"a")

    # 暂停三秒钟
    sleep(3)

    # 昵称框复制 ctrl+c
    driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys(Keys.CONTROL,"c")

    # 暂停三秒钟
    sleep(3)

    # 粘贴在密码框
    driver.find_element(By.CSS_SELECTOR, "#password").send_keys(Keys.CONTROL,"v")

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

六、元素等待

        6.1.概念

                1).在定位页面元素时如果未找到,会在指定时间内一直等待的过程

        6.2.为什么要设置元素等待?

                1).网络速度慢

                2).电脑配置低

                3).服务器处理请求慢

        6.3.元素等待类型

                1).隐式等待

                        1.1).概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待:如果不能定位到该元素,则间隔一段时间后再去定位元素:如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常NoSuchElementException

                        1.2).实现方式:driverimpicitly_wait(timeout)--->timeout:为等待最大时长,单位:秒

                        1.3). 说明

                                1.隐式等待为全局设置(只需要设置一次,就会作用于所有元素)

                                2.一般情况下为前置必写代码

                        1.4).代码

# 导包
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 网页最大化
    driver.maximize_window()

    # 隐式等待 设置十秒钟,抛出异常
    driver.implicitly_wait(10)

    # 百度搜索框 输入内容 设置一个错误异常,直接报错,说明等待失效
    driver.find_element(By.CSS_SELECTOR, "#w").send_keys("美团招聘")

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

                2).显式等待

                        2.1).概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待:如果不能定位到该元素,则间隔一段时间后再去定位元素:如果在达到最大时长时还没有找到指定元素,则抛出超时异常TimeoutException。

                        2.2).在Selenium中把显式等待的相关方法封装在WebDriverWait类中

                        2.3).实现方式

                                1.导包等待类-->from selenium.webdriver.support.wait import WebDriverwait

                                2.实例化 WebDriverwait(driver, timeout, poll_frequency=0.5)

                                        (1).driver:浏览器驱动对象

                                        (2).timeout:超时的时长,单位:秒

                                        (3).poll_frequency:检测间隔时间,默认为0.5秒

                                3.调用方法until(method):直到..时

                                        (1).method:函数名称,该函数用来实现对元素的定位

                                        (2).一般使用匿名函数来实现:lambda x:x.find_element(By.ID,userA")

                                        (3).x为driver,它是WebDriverWait类将传入的driver赋值给类self_driver,until方法调用了self_driver;

                                4.element = WebDriverWait(driver, 10, 1).until(lambda x:x.find_element(By.ID,"userA")

                        2.4).提示

                                1.WebDriverWait(driver, 10,poll_frequency=0.5).until(lambdax:x.find_element(By.CSS_SELECTOR,"#kw"))返回的是一个元素

                        2.5).代码

# 导包
from time import sleep

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)

def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 网页最大化
    driver.maximize_window()

    # 实例化显式等待类
    # 注意:调用until方法返回的一定是一个元素
    # 注意:此时element还不是元素,只有代码运行起来才是元素
    element = WebDriverWait(driver, 10,poll_frequency=0.5).until(lambda x:x.find_element(By.CSS_SELECTOR,"#kw"))

    # 输入值
    element.send_keys("美团招聘")

    # 暂停三秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        6.4.显式等待与隐式等待的区别

                1).显式等待针对单个元素生效

                2).隐式等待针对全局元素生效

七、今日学习思维导图

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值