0


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).隐式等待针对全局元素生效

七、今日学习思维导图


本文转载自: https://blog.csdn.net/weixin_61319245/article/details/140967162
版权归原作者 开测开测 所有, 如有侵权,请联系我们删除。

“day14-测试自动化之Selenium的元素操作、浏览器操作等”的评论:

还没有评论