51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

掌握基于 Selenium 的 APP 网页端测试秘籍

[复制链接]
  • TA的每日心情
    无聊
    前天 10:29
  • 签到天数: 71 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2024-7-24 16:04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一、测试环境搭建
    首先,我们来讲解如何安装和配置 Selenium 所需的环境。


    (一)浏览器驱动程序安装
    对于 Chrome 浏览器,您可以通过以下步骤安装驱动程序:
    查看浏览器版本。在 Chrome 浏览器中,输入chrome://settings/help可查看版本信息。
    访问http://chromedriver.storage.googleapis.com/index.html,根据浏览器版本下载对应驱动。
    Windows 操作系统:
    解压驱动包,将chromedriver.exe放在谷歌浏览器安装目录下的Application目录,或在系统环境变量的path中添加chromedriver.exe的路径。
    也可将chromedriver.exe放在C盘中windows文件夹下的SysWOW64(32 位系统则放在System32中),或D:\\soft\\python3\\Scripts。
    Mac 操作系统:将解压得到的chromedriver复制到/usr/local/bin目录下。
    Firefox 浏览器则需要安装geckodriver驱动,可从相关网站下载并按照说明进行配置。


    (二)Selenium 相关库安装
    可以通过以下两种方式安装 Selenium 库:
    命令行安装:使用pip install selenium命令,若下载速度慢,可更换镜像源,如pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
    也可从官方网站下载安装包,手动进行安装。


    (三)环境配置注意事项
    不同的操作系统在配置环境时可能会遇到各种问题,需要耐心处理。例如,浏览器版本与驱动版本不匹配可能导致运行错误,要确保两者对应。同时,配置环境变量时要仔细操作,以免出现错误。在安装和配置过程中,若遇到问题,可参考相关文档或在技术社区寻求帮助。

    二、元素定位技巧

    (一)ID 定位
    ID 定位是通过元素的唯一标识符进行定位。在 HTML 中,ID 通常是唯一的,这使得 ID 定位成为一种快速且准确的方式。例如,在百度搜索框的 HTML 代码中,如果其 ID 为 kw ,则可以使用 driver.find_element_by_id("kw") 来定位该元素。


    (二)Name 定位
    Name 定位是通过元素的名称属性来定位。然而,Name 属性在页面中不一定是唯一的,可能会存在多个元素具有相同的 Name 值。比如豆瓣网的搜索框,其 Name 为 q ,可以通过 driver.find_element_by_name("q") 尝试定位,但要注意可能出现的定位不唯一性问题。


    (三)XPath 定位
    XPath 定位是一种强大且灵活的定位方式,它可以通过元素的层级关系、属性、文本内容等来进行定位。例如,要定位一个具有特定属性值的元素,可以使用 //input[@id='name'] 这样的表达式。再比如,要定位父元素下的特定子元素,可以使用类似 //div[@id='parent']/input 的表达式。
    XPath 定位虽然功能强大,但由于需要遍历整个 DOM 结构,可能会影响性能。因此,在其他定位方式可行的情况下,应优先考虑其他更高效的定位方法。但对于复杂的页面结构或其他定位方式无法准确找到元素的情况,XPath 定位是一个有力的补充。


    三、等待策略

    (一)强制等待
    强制等待通过time.sleep()实现,它会让程序线程固定休眠一段时间。这种方式简单直接,但灵活性较差。
    适用场景:
    不同系统交互的地方,例如文件上传、与外部系统的通信等。
    某些特定的、难以通过其他等待方式准确控制的操作。
    (二)隐性等待
    隐性等待通过driver.implicitly_wait()设置,它为全局等待,在规定时间内等待页面元素加载完成。
    适用场景:
    页面整体加载,当希望在一定时间内确保大部分或整个页面的元素加载就绪。
    操作流程较为固定,不需要精确等待某个特定元素的情况。
    (三)显性等待
    显性等待使用WebDriverWait类,通过设置条件和时间上限来等待特定元素满足条件。
    适用场景:
    操作引起页面变化,需要等待新出现或特定状态的元素。
    元素的可见性、可点击性等特定条件需要被精确控制时。
    页面中某些元素加载时间不确定或较长,需要单独设置等待条件。
    总之,在实际的 Selenium 测试中,应根据具体的页面情况和操作需求,灵活选择和组合使用这三种等待方式,以提高测试的稳定性和效率。


    四、模拟用户交互

    (一)输入操作
    使用 Selenium 模拟用户输入操作可以通过 send_keys() 方法实现。例如,要在输入框中输入文本,可以先定位到输入框元素,然后使用以下代码:
    1. <font size="3">from selenium import webdriver
    2. browser = webdriver.Chrome()
    3. browser.get('https://example.com')
    4. input_element = browser.find_element_by_id('input_id')
    5. input_element.send_keys('输入的文本内容')</font>
    复制代码
    需要注意的是,确保输入框的定位准确,否则可能无法成功输入。
    (二)点击操作
    点击操作可以通过 click() 方法完成。比如,要点击一个按钮:
    1. <font size="3">button_element = browser.find_element_by_class_name('button_class')

    2. button_element.click()</font>
    复制代码

    在进行点击操作时,要保证元素处于可点击状态,并且定位准确。
    (三)切换操作
    切换操作包括页面切换和窗口切换。
    页面切换可以通过 get() 方法加载新页面,或者使用 back() 方法返回上一页。
    1. <font size="3">browser.get('https://newpage.com')

    2. browser.back()</font>
    复制代码

    窗口切换需要先获取所有窗口的句柄,然后根据需要切换到指定窗口。
    1. <font size="3">current_windows = browser.window_handles
    2. browser.switch_to.window(current_windows[1])</font>
    复制代码
    在模拟用户交互时,要综合考虑页面的加载情况、元素的状态以及操作的顺序,合理运用等待机制,以确保操作的准确性和稳定性。


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

    使用道具 举报

  • TA的每日心情
    无聊
    前天 10:29
  • 签到天数: 71 天

    连续签到: 1 天

    [LV.6]测试旅长

    2#
     楼主| 发表于 2024-7-24 16:06:41 | 只看该作者
    五、处理动态内容

    (一)延迟加载
    延迟加载是应对动态内容的常见策略。通过延迟加载,页面在初始时仅加载可视区域内的关键元素,随着用户的滚动或交互再逐步加载其他内容。这样可以显著提高页面的初始加载速度,提升用户体验。实现延迟加载通常需要监听滚动事件,当元素进入可视区域时触发加载操作。例如,可以使用IntersectionObserver对象来监测元素是否可见,如下所示:
    1. const observer = new IntersectionObserver((entries) => {

    2.   entries.forEach(entry => {

    3.     if (entry.isIntersecting) {

    4.       // 加载元素的逻辑

    5.     }

    6.   });

    7. });

    8. const elementsToObserve = document.querySelectorAll('.lazy-load-element');

    9. elementsToObserve.forEach(element => observer.observe(element));
    复制代码



    (二)异步加载
    异步加载常用于获取和渲染动态数据。例如,通过XMLHttpRequest或fetch发送异步请求获取数据,然后在回调函数中处理和渲染数据。这样可以避免阻塞页面的加载和渲染过程,提高页面的响应性。
    1. fetch('https://example.com/data')

    2. .then(response => response.json())

    3. .then(data => {

    4.     // 处理和渲染数据的逻辑

    5.   })

    6. .catch(error => {

    7.     // 处理错误的逻辑

    8.   });
    复制代码



    (三)动态脚本加载
    在 APP 网页端,可能需要动态加载脚本以实现特定功能。可以使用document.createElement('script')创建<script>元素,并设置其src属性来加载脚本。同时,要注意脚本加载的顺序和依赖关系,以确保功能的正常运行。


    (四)处理动态生成的元素
    由于页面内容可能动态生成,在 Selenium 测试中需要确保准确地定位和操作这些元素。可以结合使用等待策略,如显性等待,确保元素在进行操作前已完全生成和可用。同时,要注意动态生成元素的属性和状态可能会发生变化,需要在测试代码中进行相应的处理和验证。
    总之,应对 APP 网页端的动态加载内容需要综合运用多种技术和策略,根据具体的页面架构和业务需求进行优化和调整,以保障测试的准确性和稳定性。


    六、结合 Appium 测试

    Selenium 主要用于 Web 应用的自动化测试,而 Appium 则专注于移动应用。当将两者结合时,能够为移动应用测试带来诸多优势和广泛的应用场景。
    在应用方面,Selenium 与 Appium 的结合可以实现对混合应用(包含 Web 视图的移动应用)的全面测试。通过这种结合,既能对应用中的 Web 部分使用 Selenium 进行测试,又能借助 Appium 对原生移动组件进行测试,确保整个应用的功能完整性和稳定性。
    例如,在一个电商移动应用中,登录和注册页面可能是 Web 视图,而商品浏览、下单支付等功能则是原生移动组件。结合 Selenium 和 Appium 可以对这些不同部分进行连贯的测试,模拟用户从登录、浏览商品到下单支付的全过程。
    其优势主要体现在以下几个方面:
    首先,提高测试效率。无需为 Web 部分和原生移动部分分别构建独立的测试框架,减少了测试准备和维护的工作量。
    其次,增强测试覆盖度。能够涵盖移动应用的各种场景和功能,包括不同操作系统、设备型号和屏幕尺寸等。
    再者,代码复用性提高。Selenium 中编写的一些通用测试逻辑和方法,在与 Appium 结合的测试中可以部分复用,节省代码开发时间。
    最后,统一测试管理。可以在一个测试项目中整合两种测试框架,便于测试用例的管理、执行和结果分析。
    总之,Selenium 与 Appium 的结合为移动应用测试提供了更强大、更高效、更全面的解决方案,是当今移动应用开发中保障质量的重要手段。


    七、实战案例分析

    案例一:电商 APP 网页端登录功能测试
    假设我们要对一个电商 APP 的网页端登录功能进行测试。首先,通过driver.get('电商登录页面 URL')导航到登录页面。
    使用driver.find_element_by_id('username')和driver.find_element_by_id('password')定位用户名和密码输入框。
    接着,使用send_keys()方法输入用户名和密码,例如:
    1. username_input = driver.find_element_by_id('username')

    2. username_input.send_keys('test_user')

    3. password_input = driver.find_element_by_id('password')

    4. password_input.send_keys('test_password')
    复制代码



    然后,定位登录按钮并点击:
    1. login_button = driver.find_element_by_id('login_btn')

    2. login_button.click()
    复制代码

    在这个过程中,需要注意用户名和密码输入框的定位是否准确。同时,可能会出现网络延迟导致登录响应较慢的情况,此时可以使用显性等待WebDriverWait来确保登录操作完成后再进行后续判断。
    案例二:社交 APP 网页端消息发送功能测试
    以社交 APP 的网页端消息发送为例。先导航到消息发送页面:driver.get('消息发送页面 URL')。
    定位接收者输入框、消息内容输入框和发送按钮:
    1. receiver_input = driver.find_element_by_name('receiver')

    2. message_input = driver.find_element_by_class_name('message')

    3. send_button = driver.find_element_by_xpath('//button[contains(text(), "发送")]')
    复制代码



    输入接收者和消息内容并点击发送按钮:
    1. receiver_input.send_keys('friend_name')

    2. message_input.send_keys('Hello!')

    3. send_button.click()
    复制代码



    这里要注意输入内容的合法性验证以及发送按钮的可点击状态。对于消息发送的结果,可能需要等待一段时间来获取反馈,同样可以运用等待策略来保证测试的准确性。
    总之,在实际的 APP 网页端测试中,要根据具体的功能和页面结构,灵活运用 Selenium 的各种方法和等待策略,同时注意处理可能出现的异常情况,以确保测试的全面和有效。


    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-8 09:27 , Processed in 0.076615 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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