51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4225|回复: 1
打印 上一主题 下一主题

[转贴] web自动化测试浏览器操作

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:34
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-6-21 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     WebDriver中提供了一系列的浏览器操作,使用户能更好的操作浏览器,更好的进行自动化操作。下面对一些浏览器操作方法进行了介绍和使用,希望能帮助到你…
      导航
      启动浏览器后,您要做的第一件事就是打开您的网站
    1. driver.get('https://www.baidu.com/')
    复制代码
    获取当前url
      使用以下方法从浏览器的地址栏中读取当前URL
      注意current_url后面是不带括号的,使用的话是会报错的
    1. from selenium import webdriver
    2.   driver = webdriver.Chrome()
    3.   driver.get('https://www.baidu.com/')
    4.   url = driver.current_url
    5.   print(url)
    复制代码
    url显示在控制台上:
    1. /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   [url]https://www.baidu.com/[/url]
    3.   Process finished with exit code 0
    复制代码
    后退
      浏览器的后退按钮
    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   driver.find_element_by_id("kw").send_keys('查找')
    6.   time.sleep(5)
    7.   driver.back()
    复制代码
    前进
      浏览器的前进按钮
    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   driver.find_element_by_id("kw").send_keys('查找')
    6.   time.sleep(5)
    7.   driver.forward()
    复制代码
    刷新
      刷新当前页面
    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   driver.find_element_by_id("kw").send_keys('查找')
    6.   time.sleep(5)
    7.   driver.refresh()
    复制代码
    获取标题
      从浏览器中读取当前页面标题
      title不能加括号,否则会报错
    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   driver.find_element_by_id("kw").send_keys('查找')
    6.   time.sleep(5)
    7.   driver.title
    复制代码
    title名称显示在控制台:

      如果title加了括号,就报如下错误:‘str’ object is not callable
    1.  /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   Traceback (most recent call last):
    3.     File "/Users/lifeng/python-projects/test-python/selenium_script.py", line 9, in <module>
    4.       driver.title()
    5.   TypeError: 'str' object is not callable
    6.   Process finished with exit code 1
    复制代码
     获取窗口句柄
      WebDriver不会在窗口和选项卡之间进行区分。如果您的站点打开一个新的选项卡或窗口,Selenium将允许您使用窗口句柄来使用它。每个窗口都有一个唯一的标识符,该标识符在单个会话中保持不变。
      获取当前窗口的窗口句柄
      切记current_window_handle后面没有括号,加了会报错的
    1.  import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   time.sleep(1)
    6.   handle_one = driver.current_window_handle
    7.   print(handle_one)
    8.   driver.find_element_by_xpath('//*[text()="学术"]').click()
    9.   handle_two = driver.current_window_handle
    10.   print(handle_two)
    复制代码
    句柄ID显示在控制台上:
    1.  /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   CDwindow-7B9B39D222DFB38B060ECEE7C7781C60
    3.   CDwindow-7B9B39D222DFB38B060ECEE7C7781C60
    4.   Process finished with exit code 0
    复制代码
    句柄切换-切换窗口
      点击一个链接,该链接会在新窗户聚焦在屏幕上,但是WebDriver将不知道操作系统认为哪个窗口处于活动状态。要使用新窗口,您将需要切换到它。window_handles是获取多个句柄,返回的是一个列表,可以使用下标获取。











    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 09:34
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    2#
     楼主| 发表于 2021-6-21 09:56:38 | 只看该作者
    1.  import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   time.sleep(1)
    6.   handle_one = driver.current_window_handle
    7.   driver.find_element_by_xpath('//*[text()="学术"]').click()
    8.   wins = driver.window_handles
    9.   print(wins)
    复制代码
    以一个列表结果显示在控制台上:
    1.  /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   ['CDwindow-AF8997BAD711CC3594401F925514090B', 'CDwindow-FEDA1D318C16D669C57446ECA6296709']
    3.   Process finished with exit code 0
    复制代码
    再用switch_to.window()用来获取指定窗口,也就是切换窗口

      页面显示结果,获取的句柄是第一个,也就是wins[0]获取的那个句柄。
      关闭窗口
      当完成一个窗口并且它不是浏览器中最后一个打开的窗口时,应将其关闭并切换回以前使用的窗口。

    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   time.sleep(1)
    6.   handle_one = driver.current_window_handle
    7.   driver.find_element_by_xpath('//*[text()="学术"]').click()
    8.   wins = driver.window_handles
    9.   driver.switch_to.window(wins[0])
    10.   driver.close()
    复制代码
    退出浏览器
      完成浏览器会话后,应调用quit而不是close
    1. import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   time.sleep(1)
    6.   handle_one = driver.current_window_handle
    7.   driver.find_element_by_xpath('//*[text()="学术"]').click()
    8.   wins = driver.window_handles
    9.   driver.switch_to.window(wins[1])
    10.   time.sleep(2)
    11.   driver.close()
    12.   time.sleep(2)
    13.   driver.quit()
    复制代码
    退出将:
      1.关闭与该WebDriver会话关联的所有窗口
      2.关闭浏览器进程
      3.关闭后台驱动程序
      我们也可以使用 try / finally ,这样出现异常仍会退出浏览器会话,finally号称流氓,也就是不管怎么样,最后都会执行 finally 。
    1.  import time
    2.   from selenium import webdriver
    3.   driver = webdriver.Chrome()
    4.   driver.get('https://www.baidu.com/')
    5.   try:
    6.       time.sleep(1)
    7.       handle_one = driver.current_window_handle
    8.       driver.find_element_by_xpath('//*[text()="学术"]').click()
    9.       wins = driver.window_handles
    10.       driver.switch_to.window(wins[1])
    11.       time.sleep(2)
    12.       driver.close()
    13.       time.sleep(2)
    14.   finally:
    15.       driver.quit()
    复制代码
    当然现在的WebDriver也是支持python上下文管理器的,当使用with关键字时,它可以在执行结束时自动退出驱动程序。
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://www.baidu.com/')
    5.       time.sleep(2)
    6.       driver.find_element_by_xpath('//*[text()="学术"]').click()
    7.       time.sleep(2)
    复制代码
    框架和内联框架(frames and Iframes)
      如果是iframe框架,我们就要先进入框架再进行元素操作
    1. iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
    2.   driver.switch_to.frame(iframe)
    3.   driver.find_element(By.CLASS_NAME, 'button').click()
    复制代码
    进入框架后,操作完成后也要记得离开框架,不然框架外的元素就无法定位了,离开框架就要使用下面的方法:
    1. driver.switch_to.default_content()
    复制代码
    获取窗口大小
      获取浏览器窗口的大小(以像素为单位)
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://pan.baidu.com/')
    5.       time.sleep(2)
    6.       driver.get_window_size().get('width')
    7.       driver.get_window_size().get('height')
    复制代码
    也就可以这样操作:
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://pan.baidu.com/')
    5.       time.sleep(2)
    6.       size = driver.get_window_size()
    7.       width = size.get('width')
    8.       height = size.get('height')
    9.       print(f'宽:{width}, 高:{height}')
    10.       driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
    11.       time.sleep(2)
    复制代码
    把宽度和高度显示在控制台:
    1. /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   宽:1200, 高:897
    3.   Process finished with exit code 0
    复制代码
    设定窗口大小
      恢复窗口并设置窗口大小
    1. driver.set_window_size(1024, 768)
    复制代码
    获取窗口位置
      获取浏览器窗口左上角的坐标
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://pan.baidu.com/')
    5.       time.sleep(2)
    6.       position = driver.get_window_position()
    7.       x = position.get('x')
    8.       y = position.get('y')
    9.       print(f'坐标 x:{x}, 坐标 y:{y}')
    10.       driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
    11.       time.sleep(2)
    复制代码
    也可以这样操作:
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://pan.baidu.com/')
    5.       time.sleep(2)
    6.       x = driver.get_window_position().get('x')
    7.       y = driver.get_window_position().get('y')
    8.       print(f'坐标 x:{x}, 坐标 y:{y}')
    9.       driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
    10.       time.sleep(2)
    复制代码
    把坐标x和坐标y显示在控制台:
    1. /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
    2.   坐标 x:22, 坐标 y:47
    3.   Process finished with exit code 0
    复制代码
    设定视窗位置
      将窗口移到所选位置
    1. driver.set_window_position(0, 0)
    复制代码
    最大化窗口
      该窗口将填满整个屏幕,且不会阻塞操作系统自己的菜单和工具栏
    1.   driver.maximize_window()
    复制代码
     最小化窗口
      最小化窗口通常会将窗口隐藏在系统托盘中
    1.  driver.minimize_window()
    复制代码
    全屏窗口
      填充整个屏幕,类似于在大多数浏览器中按F11键
    1. driver.fullscreen_window()
    复制代码
    截屏
      捕获当前浏览上下文的屏幕截图。返回以Base64格式编码的屏幕截图。
    1. from selenium import webdriver
    2.   driver = webdriver.Chrome()
    3.   driver.get('https://pan.baidu.com/')
    4.   driver.save_screenshot('./image.png')
    5.   driver.quit()
    复制代码
    屏幕截图
      捕获当前浏览上下文的元素的屏幕快照。返回以Base64格式编码的屏幕截图
    1. import time
    2.   from selenium import webdriver
    3.   with webdriver.Chrome() as driver:
    4.       driver.get('https://pan.baidu.com/')
    5.       time.sleep(2)
    6.       ele = driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]')
    7.       ele.screenshot('../image.png')
    8.       time.sleep(2)
    复制代码














    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 00:39 , Processed in 0.064635 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表