今天是持续写作的第 29 / 100 天。

如果你有想要交流的想法、技术,欢迎在评论区留言。

学习编程就是为了解决问题,接下来本系列的文章都将以项目的形式展现,为你打开项目之门。

做测试项目之前的准备工作

项目需求分析

制定项目计划

制定测试用例

开始测试

上述的前 3 个步骤,咱们一概不讲,直接从第 4 步开始走起。

自动化测试之途牛搜机票

本次案例对应的网站为:https://flight.tuniu.com/ 需要完成下述图片内容的自动写入,然后在点击搜索操作。看似一个非常小的案例,学过之后你会发现 Selenium 在自动化操作中其实一直在重复一个动作,就是查找元素。

逐个元素获取

在 Selenium 中获取网页各元素是最重要的操作,只要能获取到,就能对其下手。

优先设置出发地和到达地。

from selenium import webdriver

import time

driver = webdriver.Firefox()

driver.maximize_window()

driver.get('https://flight.tuniu.com/')

# 定义好出发和到达的城市

from_city = "石家庄"

to_city = "三亚"

driver.find_element_by_id("J_FormDepartCity").send_keys(from_city)

driver.find_element_by_id("J_FormDestCity").send_keys(to_city)

接下来设置时间,发现一些小问题,直接使用下述代码,无法设置。

from_date = "2021-01-01"

driver.find_element_by_id("J_FormDepartCity").send_keys(from_city)

driver.find_element_by_id("J_FormDestCity").send_keys(to_city)

# 设置时间

driver.find_element_by_id("J_FormDepartDate").send_keys(from_date)

问题出在,时间控件的网页参数为 readonly,就是只读的,所以设置不了。

执行一段 JS 脚本,删除掉只读操作。

# 删除时间控件的只读属性

driver.execute_script("document.getElementById('J_FormDepartDate').removeAttribute('readonly')")

# 设置时间

driver.find_element_by_id("J_FormDepartDate").clear()

driver.find_element_by_id("J_FormDepartDate").send_keys(from_date)

代码再次运行,又一次发现问题,实际编程中我们也是不断的在发现问题解决问题的路上。直接通过 Selenium 输入的程序,系统无法自动检索,需要实现对城市的查找,点选操作。如下图所示。

对于元素的点选,多次尝试之后(此处反复的寻找获取标签的方法即可),最终得到下述代码。

# 定义好出发和到达的城市

from_city = "SJZ"

to_city = "SY"

from_date = "2021-01-01"

driver.find_element_by_id("J_FormDepartCity").send_keys(from_city)

time.sleep(2)

driver.find_element_by_xpath("//div[@class='autocomplete-suggestions'][1]/div[1]").click()

driver.find_element_by_id("J_FormDestCity").send_keys(to_city)

time.sleep(2)

driver.find_element_by_xpath("//div[@class='autocomplete-suggestions'][2]/div[2]").click()

截止到现在,所有的元素已经获取完毕,实现最后一步点击操作,即可实现查询。本阶段完整代码如下。

from selenium import webdriver

import time

from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()

driver.maximize_window()

driver.get('https://flight.tuniu.com/')

# 定义好出发和到达的城市

from_city = "SJZ"

to_city = "SY"

from_date = "2021-01-01"

driver.find_element_by_id("J_FormDepartCity").send_keys(from_city)

time.sleep(2)

driver.find_element_by_xpath("//div[@class='autocomplete-suggestions'][1]/div[1]").click()

driver.find_element_by_id("J_FormDestCity").send_keys(to_city)

time.sleep(2)

driver.find_element_by_xpath("//div[@class='autocomplete-suggestions'][2]/div[2]").click()

# 删除时间控件的只读属性

driver.execute_script("document.getElementById('J_FormDepartDate').removeAttribute('readonly')")

# 设置时间

driver.find_element_by_id("J_FormDepartDate").clear()

driver.find_element_by_id("J_FormDepartDate").send_keys(from_date)

# 点击一下其他位置,清除浮窗

ActionChains(driver).move_by_offset(0,10).click().perform()

# 点击搜索按钮

time.sleep(1)

driver.find_element_by_id("J_Search").click()

最终得到的效果如下。

后续内容

以上代码其实已经演示了一个自动化测试项目的主要流程,因为途牛网站并不是咱们自己开发的,所以多次访问之后会被限制访问,绕过限制属于爬虫类的知识了,本项目只展示自动化相关内容,其它部分不再扩展。

后续在跳转页面,获取元素与上文相关代码一致,都是采用相同的办法,而且没有固定解,使用 Selenium 特别像是一个开卷编程,所有人实现同一功能所用的代码可能不一致。

本案例采用的是一个线性代码项目,即从上到下依次执行,后续几篇博客将对本项目进行修改,编程上专业术语叫做重构。

写在后面

学习是为了使用和解决问题,所以你有想要完成的任务吗?学习到这里,可以看看是否可以用 Selenium 解决呢?

如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号“非本科程序员”,了解一个非本科程序员是如何成长的。

博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。

本文同步分享在 博客“梦想橡皮擦”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

软件自动化测试订飞机票,用 Selenium 搞定自动化测试项目,途牛搜机票。相关推荐

  1. mac写python用什么软件_Mac安装软件,一条指令就搞定

    Mac安装软件,一条指令就搞定 2020-02-05 16:00:05 6点赞 57收藏 12评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动详情 1. ...

  2. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  3. 软件自动化测试订飞机票,飞机订票系统自动化测试方案[教学知识]

    <飞机订票系统自动化测试方案[教学知识]>由会员分享,可在线阅读,更多相关<飞机订票系统自动化测试方案[教学知识](18页珍藏版)>请在人人文库网上搜索. 1.飞机订票系统自动 ...

  4. 如何使用Selenium IDE浏览器插件轻松完成脚本录制,轻松搞定自动化测试!

    Selenium IDE可以用来调式Selenium脚本,支持将浏览器的Web网页操作导出为不同编程语言的脚本. 创建项目之后可以录制或回放已录制的网页操作情况,特别是对一些开发测试人员提供了相当大的 ...

  5. 识别字体软件测试,2行代码帮你搞定自动化测试的文字识别

    前言 Airtest是一款 基于图像识别原理 的跨平台UI自动化测试框架,它能够根据大量的 特征点 来识别一个截图在当前画面中的位置,但是它并不能识别出截图中具体包含了什么文字. 而在自动化测试的过程 ...

  6. flash设置屏保 html,全面淘汰 Flash 带崩经典屏保软件:教你一招搞定它

    Fliqlo 是很多人都喜欢的一款屏保软件,由于酷似 MacOS 里的动态时钟屏保,点击率很高.不过很多网友发现,这两天 Fliqlo 貌似出问题了,没有了酷酷的翻页时钟,而是下面这个鬼样子!显然,这 ...

  7. wps流程图导出不清楚_一份清晰的“流程图”,无需专业软件,一个简单Word轻松搞定...

    制作流程图前我们需要三个准备,但当我们所有准备完成后,就是一定要亲自去实操,否则只能是空想,在实际操作时却不知道该从何入手,就好比现在自己需要画一个简单的流程图,应该在哪里操作呢? 一般情况分为两种, ...

  8. 苹果呼叫转移设置不了_苹果下载不了软件怎么办?手把手带你搞定

    苹果下载不了软件怎么办?不知道各位在使用自己的苹果手机时有没有遇到这样的问题,之前将一部闲置iPhone格式化以后想要重新下载一些软件,但是应用商店无法正常使用,排查了各种问题以后发现可以通过以下几个 ...

  9. 6款办公软件,让你10分钟搞定3小时的工作!

    工作时间占据我们一大半的时间,如何一边轻松工作,还能拿到高薪?这6款高效办公工具绝对不能错过,不仅能让你工作效率连跳三级,还让领导刮目相看. 01.会议帮手 - 讯飞听见 有没有觉得,每次开会,领导在 ...

最新文章

  1. 5.1软件升级的小阳春
  2. Qt 互斥锁 QMutex 的简单应用
  3. 用Java访问带有Kerberos认证的HBase
  4. chrome浏览器被reimage pair 劫持怎么处理
  5. filebeat 乱码
  6. 【飞秋】存储过程与业务类实现业务的差异比较
  7. Mapgis与Arcgis数据互转中出现的问题
  8. 软考论文案例-论微服务架构及其应用
  9. 微信小程序引入阿里巴巴icon步骤及报错解决
  10. 非理性因素引导下的营销策略分析
  11. mysql数据库学习(一)
  12. 在香港用什么软件可以唱歌?香港K歌app推荐
  13. python docx 图片_python-docx设置图片大小和对齐方式
  14. php公众号回复接口,微信公众平台开发接口教程之公众账号自定义回复功能
  15. Smartbi报表工具实现并查询(不去重)
  16. matlab排版形式是什么样子,版式设计技巧!论图文排版的基本形式
  17. 微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
  18. GAN的介绍和简单代码的实现
  19. html下拉栏加箭头,CSS-下拉菜单上的引导3箭头
  20. ABAP HASH TABLE 主键重复时

热门文章

  1. Android图片压缩详解
  2. 2014年实习生招聘之爱立信上海研发中心实习生招聘面试—2014/04/18
  3. 门户网站建设有哪些类型?
  4. 码云-中国的github
  5. 【论文阅读#1】Edge Computing: Vision and Challenges
  6. 奥特斯出席2018重庆市市长国际经济顾问团第十三届年会
  7. matlab对矩阵的排列顺序,matlab数组按照指定顺序重排
  8. 05人月神话读书笔记之一
  9. 基于手机支付方式的电子商务网站
  10. 我天!中国科技原来有桎梏!道翰天琼认知智能机器人API平台接口为您揭秘-1。