文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

给初学者的自动化跨浏览器兼容性测试指南

2024-12-03 11:45

关注

【51CTO.com快译】根据StatCounter的一项统计:在亚洲,有82%的移动用户使用着Android,在iOS上的用户数占比为17%,而其他操作系统的使用者则不到1%。在美国,有61%的人使用着iOS,只有38%的人使用Android。而且仍有10.5%的Windows用户仍在使用着Windows 7。在用户设备的默认/首选分辨率方面,有着360x640像素、1366x768像素和1920x1080像素等不同的规格。可见,就全球范围而言,Android主导着操作系统市场,其次则为Windows、iOS和OSX。同样,浏览器的市场以Chrome为主,其次是Safari、Firefox、Samsung Internet、Edge、Opera和UC Browser。

最常见的跨浏览器兼容性问题

如今,各种Web应用往往是通过复杂的CSS、HTML5、JS和其他几个框架来构建的。不过,并非每个用户端的浏览器都会通过自我升级,来支持开发人员部署的各项新功能。据此,我们需要通过测试,来提前处置如下常见的跨浏览器兼容性问题:

因此,在数字化设备和用户偏好纷繁复杂的情况下,企业为了保证用户的UI/UX,需要仔细考虑如下问题:

虽然在不同的场景下,上述问题有着不同的优先级,但是它们都引出了跨浏览器兼容性测试(https://www.lambdatest.com/feature),这一主题。

什么是跨浏览器测试?

简而言之,跨浏览器兼容性测试是在各种设备、操作系统、浏览器、及其不同版本上对Web应用进行检查、验证、以及迭代式增强,使其能够对所有用户提供正常服务的方法。例如,对于拥有数十亿用户的Facebook之类的大型应用而言,在理想情况下,我们应当进行针对“浏览器A,版本B,操作系统C,屏幕分辨率D”等所有组合的测试。

手动与自动化跨浏览器测试

跨浏览器测试主要分为三大类:探索性测试、视觉测试和功能性测试。除了视觉测试需要手动开展之外,其他两类测试都可由自动化来完成。手动测试的弊端主要体现在:不仅耗费时间和资源,而且测试的覆盖面可能不够全面。因此,我们通常需要采用混合的测试策略。也就是说,开展跨浏览器兼容性测试的工程师,往往需要具备脚本的编写能力,可以使用Selenium,以及其他编程语言(如:Java、Python、C#、JS、PHP等),通过自动化的方式,来执行各项测试任务。据此,他们可以:

在此基础上,自动化跨浏览器兼容性测试的好处主要体现在如下方面:

如何开展有效的跨浏览器兼容性测试?

通常,我们需要通过如下四个阶段,来完成跨浏览器的测试。

此阶段涉及到彻底调查应用程序的目标市场,收集所需的可用性需求,通过设计测试路线图,以确保应用能够被成功地开发和部署。例如,如果您要为印度市场(那里仍有许多人在使用IE)构建B2B产品,而且该产品中需提供一个由WebGL支持的3D动画效果。那么,您需要考虑的一个因素便是:是否要支持IE 11之前的版本。如果确实无法支持的话,产品应当能够在旧的版本上,让应用并不呈现此功能,以免破坏用户的UI/UX。

在此阶段,您需要将应用程序细化为单独的组件,以分解出不同的功能模块。据此,您可以为那些可能无法在各种浏览器或设备上良好呈现的功能,设计出独立的代码方案。此外,开发人员也需要考虑到硬件方面的限制,某些功能可能根本无法在某些设备上实现,因此需要事先设计好替代方法。

自动化测试工程师将在该阶段,通过如下方法测试每个新构建的功能:

首先,在稳定的主流浏览器(如:Safari、Chrome和Firefox)上测试应用程序,并确认不会出现任何妨碍应用呈现的错误。

接着,可以尝试使用lo-fi(低保真)的可访问性测试,来交叉验证应用是否需要少量的辅助技术(例如:仅适用于键盘或屏幕阅读器的环境)。

通过仿真器或虚拟机(当然如果买得起真实的物理设备则更好),进行不同设备、浏览器、及其版本的组合测试。

使用自动测试工具(如:Selenium Grid)或商业服务(如:LambdaTest)来进一步提高跨浏览器兼容性测试的准确性、速度、以及浏览器环境的覆盖率。

其中,跨浏览器兼容性测试的要点清单可以总结为如下方面:

该阶段需要查找我们在上述测试阶段产生的错误、及其根本原因,进而缩小存在此类错误的浏览器版本、设备、分辨率的范围。当然,错误的原因可能并非来自应用的本身,也可能是浏览器或设备厂商造成的。因此,我们通过在类似的浏览器或设备进行深入测试,以评估错误的规模,进而报告给有关的开发团队。

跨浏览器兼容性测试的推荐工具和基于云的服务

目前,最受欢迎的Web和移动测试开源框架有:

下面,我为您列出了提交和报告不同浏览器错误的对应链接:

而以下是各大主流浏览器平台的开发者测试链接。您可以有针对性地对即将发布的应用进行测试:

跨浏览器测试的示例

总的说来,我们首先会在云端使用LambdaTest的免费版本设计自动化测试。接着,我们将使用Python在“jqueryui.com”上构建具有拖放功能的HTML元素。然后,我们将在Chrome和Firefox中测试此功能。当然,您也可以在其他浏览器版本、操作系统、以及屏幕分辨率上开展测试。

下面便是被部署在虚拟环境中的lambdatest_crossbrowser.py文件里的Java测试代码。 

  1. from selenium import webdriver 
  2. from selenium.webdriver.common.action_chains import ActionChains 
  3. import time   
  4.  
  5. username = "hustlewiz247"  
  6. accessToken = "1BtTGpkzkYeOKJiUdivkWxvmHQppbahpev3DpcSfV460bXq0GC"  
  7. gridUrl = "hub.lambdatest.com/wd/hub"  
  8. browsers = [  
  9.     {  
  10.         "browser":"Chrome" 
  11.         "version":"71.0" 
  12.     },  
  13.     {  
  14.         "browser":"Firefox"
  15.         "version":"71.0" 
  16.     }  
  17.    
  18. for cap in browsers: 
  19.     desired_cap = {  
  20.         'platform' : "win10" 
  21.         'browserName' : cap["browser"],  
  22.         'version' :  cap["version"],  
  23.         "resolution""1024x768" 
  24.         "name""LambdaTest Cross Browser Compatibility Testing" 
  25.         "build""LambdaTest Cross Browser Compatibility Testing" 
  26.         "network"True 
  27.         "video"True
  28.         "visual"True 
  29.         "console"True 
  30.     } 
  31.     url = "https://"+username+":"+accessToken+"@"+gridUrl  
  32.     print("Initiating remote driver on platform: "+desired_cap["platform"]+" browser: "+desired_cap["browserName"]+" version: "+desired_cap["version"]) 
  33.     driver = webdriver.Remote(  
  34.         desired_capabilities=desired_cap, 
  35.         command_executor= url 
  36.     ) 
  37.     driver.maximize_window()  
  38.     driver.get('https://jqueryui.com/draggable/'
  39.     driver.switch_to.frame(0)  
  40.     source1 = driver.find_element_by_id('draggable' 
  41.     action = ActionChains(driver) 
  42.     action.click_and_hold(source1).move_by_offset(150, 100).pause(2).move_by_offset(-10, -10).release().perform() 
  43.     print("Dragged successfully\n" 
  44.     time.sleep(5) 
  45.     driver.get('https://jqueryui.com/droppable/'
  46.     driver.switch_to.frame(0) 
  47.     source1 = driver.find_element_by_id('draggable' 
  48.     target1 = driver.find_element_by_id('droppable' 
  49.     actions2 = ActionChains(driver)  
  50.     actions2.click_and_hold(source1).move_to_element(target1).pause(2).move_by_offset(20, 20).release().perform() 
  51.     print("Dragged and dropped successfully\n" 
  52.     time.sleep(5)  
  53.     if target1.text == "Dropped!"
  1.     print("Test Executed Successfully On : " + str(cap["browser"]))
  2. time.sleep(2)  
  3.     driver.quit() 

以下Java代码是从Selenium库中导入的webdriver和actionchains类。 

  1. from selenium import webdriver 
  2. from selenium.webdriver.common.action_chains import ActionChains 

 上述代码导入了一个内置了Python包的时间模块,它可以将程序的执行暂停指定的秒数。接着,我们通过如下代码,设置LambdaTest的用户身份验证代码,配置用户名、访问令牌和gridUrl。你可以在LambdaTest的自动化仪表板(https://automation.lambdatest.com/)中找到相关内容。 

  1. username = "your username" 
  2.  
  3. accessToken = "your access token" 
  4.  
  5. gridUrl = "hub.lambdatest.com/wd/hub" 

我们会在不同浏览器中创建一个目录,以便针对应用程序开展交叉测试。在此,我们以Chrome v71.0和Firefox v71.0两个浏览器为例,通过“浏览器”和“版本”的键-值对,指定需要测试应用的目标浏览器,及其特定版本。 

  1. browsers = [ 
  2.     { 
  3.         "browser":"Chrome"
  4.         "version":"71.0" 
  5.     }, 
  6.     { 
  7.         "browser":"Firefox"
  8.         "version":"71.0" 
  9.     } 

 我们通过for cap in browsers:来遍历浏览器字典,进而对Chrome和Firefox进行功能上的交叉测试。而在cap字典中,我们为lamdatest自动化测试的selenium grid指定测试的配置环境。如下代码中的“Platform”指定了目标操作系统,后续还包括:浏览器名称、分辨率等方面。 

  1. desired_cap = { 
  2.         'platform' : "win10"
  3.         'browserName' : cap["browser"], 
  4.         'version' :  cap["version"], 
  5.         "resolution""1024x768"
  6.         "name""LambdaTest Cross Browser Compatibility Testing"
  7.         "build""LambdaTest Cross Browser Compatibility Testing"
  8.         "network"True
  9.         "video"True
  10.         "visual"True
  11.         "console"True
  12.     } 

 我们通过如下URL的command_executor,来指定远程服务器的地址位置: 

  1. url = "https://"+username+":"+accessToken+"@"+gridUrl 

同时,我们运用如下Java代码来创建浏览器驱动程序的实例: 

  1. driver = webdriver.Remote( 
  2.         desired_capabilities=desired_cap, 
  3.         command_executor= url 

 我们可以通过执行driver.maximize_window()来最大化浏览器窗口。而为了在远程浏览器中获取URL,以测试拖放功能,我们使用driver.get,来调用webDriver的get('URL')API。

在此,我们可以观察到该网站在iFrame中带有拖放功能。因此我们需要通过driver.switch_to.frame(0)换到第0帧,以实现与该iFrame中的HTML元素进行交互。此外,我们还可以通过source1 = driver.find_element_by_id('draggable'),来查找可拖放的HTML元素。

同时,我们通过action = ActionChains(driver),来创建一个Actionchains方法的别名。而selenium中的Actionchains类可以实现与浏览器元素的硬件交互。

下面的代码负责创建:单击可拖动元素,将其保持一会儿,将源组件移动到另一个位置,最后释放它,以及打印出参考消息等一系列操作。在实际的操作中,您可以单击屏幕快照、或调用用于触发电子邮件及通知的API,然后发送成功与否的通知。 

  1. action.click_and_hold(source1).move_by_offset(150, 100).pause(2).move_by_offset(-10, -10).release().perform() 
  2.     print("Dragged successfully\n"

如果您想在本地系统的测试中观察得更加仔细,那么可以调用“time”包中的“sleep”方法,通过time.sleep(5),来暂停一段时间。

下面,我们在浏览器中获取另一个URL--driver.get,以测试“拖放”功能。

如前所述,我们通过driver.switch_to.frame(0),可以切换到iFrame的第0帧,以便进行可拖动和可放置的元素交互。

为了将source1(draggable)元素拖到source2(droppable),我们可以使用如下Java代码段,获得可拖动的HTML元素位置、以及可拖放的HTML元素位置。 

  1. source1 = driver.find_element_by_id('draggable'
  2.    target1 = driver.find_element_by_id('droppable'

而为了放到特定元素上,我们可以通过如下Java代码创建了一系列的拖动动作。 

  1. actions2 = ActionChains(driver) 
  2.     actions2.click_and_hold(source1).move_to_element(target1).pause(2).move_by_offset(20, 20).release().perform() 
  3.     print("Dragged and dropped successfully\n"
  4.     time.sleep(5) 

 在源元素被放到目标位置时,我们将文本更改为“Dropped!”,以对其进行交叉验证,并在受测浏览器中显示一条输出消息。 

  1. if target1.text == "Dropped!"
  2.         print("Test Executed Successfully On : " + str(cap["browser"])) 
  3.     time.sleep(2) 

我们使用driver.quit(),来退出已启动的浏览器实例。具体负载执行的终端命令为:python your_test_file_name.py。而在成功执行后,我们将在LambdaTest的仪表板上看到如下信息为:

同时在终端上的显示信息为:

如您所见,该测试首先运行在Chrome上,然后运行在Firefox上。其实,LambdaTest也提供了一个功能生成器,可以帮助您轻松地设定各种所需的浏览器和操作系统功能。

小结

作为测试人员,您往往肩负着确保被测应用能够在各种设备和浏览器之间的平稳运行的使命。而跨浏览器测试技能正是测试人员武器库中,最有效的武器之一。我们既需要人工进行测试结果的判断,也需要自动化工具来简化测试的相关基础架构,增强测试效率与能力,不断提高测试的覆盖面和准确度。

原文A Beginner’s Guide to Automated Cross-Browser Compatibility Testing,作者:Jaswant Kaur

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯