Appium+python自动化(二十八)- 高级滑动(超详解)
高级溜冰的滑动
滑动操作一般是两点之间的滑动,这种滑动在这里称其为低级的溜冰滑动;就是上一节给小伙伴们分享的。然而实际使用过程中用户可能要进行一些多点连续滑动操作。如九宫格滑动操作,连续拖动图片移动等场景。那么这种高级绚丽的溜冰滑动在Appium中该如何模拟这类操作呢?下面给你慢慢道来。
TouchAction
首先看一下官方文档
地址:https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html
Touch Action包含一些列操作,比如按压、长按、点击、移动、暂停。由着些不同操作可以组成一套动作。使用TochAction需要先导入对应的模块
from appium.webdriver.common.touch_action import TouchAction
按压
方法:press() 开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置。 press也可以接收屏幕的坐标(x,y)。
press(self, el=None, x=None, y=None)TouchAction(driver).press(x=0,y=308)
长按
方法:longPress() 开始按压一个元素或坐标点(x,y)。 相比press()方法,longPress()多了一个入参,既然长按,得有按的时间吧。duration以毫秒为单位。1000表示按一秒钟。其用法与press()方法相同。
long_press(self, el=None, x=None, y=None, duration=1000)
点击
方法:tap() 对一个元素或控件执行点击操作。用法参考press()。
tap(self, element=None, x=None, y=None, count=1)
移动
方法:move_to() 将指针从上一个点移动到指定的元素或点。
move_to(self, el=None, x=None, y=None)
注意:
移动到目位置有时是算绝对坐标点,有时是基于前面一个坐标点的偏移量,这个要结合具体App来实践。
暂停
方法:Wait()
wait(self, ms=0)
暂停脚本的执行,单位为毫秒。
释放
方法:release() 结束的行动取消屏幕上的指针。
release(self)
执行
方法:perform() 执行的操作发送到服务器的命令操作。
perform(self)
TouchAction实战——九宫格滑动操作
九宫格是一种比较常见的图案加密方式,目前很多App都支持设置图案锁,Android原生系统也支持设九宫格图案锁屏。那么我们该如何使用Appium进行滑动操作呢?
测试场景
安装启动随手记App 启动App后在密码设置选项中开启手机密码并滑动九宫格设置如下“Z”字形的图形密码。
测试环境
1.我的系统环境是Windows 10版本 64位系统
2.dk版本:"1.8.0_181"
3.appium版本:1.4.16
4.selenium:3.141.0
安装selenium:
输入指令pip install selenium
验证安装成功:pip show selenium
5.测试设备:Android 5.1.1 (不能低于5.0版本)
6.Python:3.7.2
命令:python -V ,回车即可。
7.测试App:随手记Android app V9.7.1.5
想法与思路
- 安装启动随手记APP
- 代码实现点击“下一步”,向左滑动首页引导页面
- 点击“开始随手记”进入首页页面
- 点击“设置”按钮,向上滑动,找到“高级”按钮,点击进入
- 点击“手势密码”,开始设置手势密码(高级滑动)
代码实现
(1)安装启动随手记
(2)代码实现点击“下一步”,向左滑动首页引导页面
(3)点击“开始随手记”进入首页页面
(4)点击“设置”按钮,向上滑动,找到“高级”按钮,点击进入
(5)点击“手势密码”,开始设置手势密码,进行解锁(高级滑动)
这个地方move_to到了按下的这个坐标点,是因为不这样的话实际结果忽略掉了第一个按下的点。release()释放,perform()执行。
代码运行结果
运行过程appium和夜神模拟器
参考代码
1 # coding=utf-82 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行3 4 # 2.注释:包括记录创建时间,创建人,项目名称。5 '''6 Created on 2019-8-077 @author: 潇潇说测试8 Project:学习和使用appium自动化测试-高级滑动9 '''
10 # 3.导入模块
11 from appium import webdriver
12 from appium.webdriver.common.touch_action import TouchAction
13 from selenium.webdriver.support.ui import WebDriverWait
14 from selenium.common.exceptions import NoSuchElementException
15 from time import sleep
16
17 desired_caps={}
18 desired_caps['platformName']='Android'
19 desired_caps['deviceName']='127.0.0.1:62001'
20 desired_caps['platforVersion']='5.1.1'
21
22 desired_caps['app']=r'C:\Users\DELL\Downloads\mymoney.apk'
23 desired_caps['appPackage']='com.mymoney'
24 desired_caps['appActivity']='com.mymoney.biz.splash.SplashScreenActivity'
25
26 driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
27 driver.implicitly_wait(5)
28
29
30 def get_size():
31 x=driver.get_window_size()['width']
32 y=driver.get_window_size()['height']
33 return x,y
34
35 def swipeLeft():
36 l=get_size()
37 x1=int(l[0]*0.9)
38 y1=int(l[1]*0.5)
39 x2=int(l[0]*0.1)
40 driver.swipe(x1,y1,x2,y1,1000)
41
42 def swipeUp():
43 l = get_size()
44 x1 = int(l[0] * 0.5)
45 y1 = int(l[1] * 0.95)
46 y2 = int(l[1] * 0.35)
47 driver.swipe(x1, y1, x1, y2, 1000)
48
49 #等待启动页面元素,然后向左滑动两次,跳过引导页面
50 WebDriverWait(driver,6).until(lambda x:x.find_element_by_id('com.mymoney:id/next_btn'))
51 for i in range(2):
52 swipeLeft()
53 sleep(0.5)
54 #点击“开始随手记”按钮
55 driver.find_element_by_id('com.mymoney:id/begin_btn').click()
56 #检测是否有活动页面弹窗,如果有就点击关闭
57 try:
58 closeBtn=driver.find_element_by_id('com.mymoney:id/close_iv')
59 except NoSuchElementException:
60 pass
61 else:
62 closeBtn.click()
63
64 #点击设置
65 driver.find_element_by_id('com.mymoney:id/nav_btn_forth').click()
66 #等待界面菜单加载出来,然后向上滑动
67 WebDriverWait(driver,6).until(lambda x:x.find_element_by_id('android:id/content'))
68 swipeUp()
69 #点击高级菜单
70 driver.find_element_by_android_uiautomator('new UiSelector().text("高级")').click()
71 #点击密码与手势密码菜单
72 driver.find_element_by_id('com.mymoney:id/password_protect').click()
73 #点击手势密码保护
74 driver.find_element_by_id('com.mymoney:id/ll_gesture_psd').click()
75 #连续滑动两次设置图案密码
76 for i in range(2):
77 TouchAction(driver).press(x=212, y=296).wait(100)\
78 .move_to(x=148, y=0).wait(100)\
79 .move_to(x=148,y=0).wait(100)\
80 .move_to(x=-148,y=148).wait(100)\
81 .move_to(x=-148,y=148).wait(100)\
82 .move_to(x=148,y=0).wait(100)\
83 .move_to(x=148,y=0).wait(100) \
84 .release().wait(200).perform()
连续滑动设置手势密码坐标计算
首先使用工具获取到元素坐标位置,可以看到起始位置是【138,218】,终点位置是【581,661】
分析:
该图形可以横竖划分六等分
那么第一个圆中心点的坐标:
x=138+(581-138)/6
y=218+(661-218)/6
依次类推,想要画一个z形状,则需要计算第1、2,3,5,7,8,9这几个圆的中心点坐标
然后用TouchAction 的press和moveto方法将几个步骤链接起来。代码如下
1 #引入包 2 from appium.webdriver.common.touch_action import TouchAction 3 4 def settingPassword(self):5 6 #[138,218][581,661]夜神上的元素坐标 7 8 xxx = (581-138) / 69 one_x = 138 + xxx
10 one_y = 218 + xxx
11 two_x = 138 + xxx * 3
12 two_y = 218 + xxx #与第二个纵坐标相等
13 three_x=138 + xxx*5
14 three_y=218 + xxx #与第二个纵坐标相等
15 five_x=138 + xxx * 3
16 five_y=218+xxx*3
17 seven_x=138 + xxx
18 seven_y=218+xxx*5
19 eight_x=138 + xxx * 3
20 eight_y=218+xxx*5
21 nine_x=138 + xxx*5
22 nine_y=218+xxx*5
23
24 TouchAction(self.driver).press(x=one_x, y=one_y).wait(300).move_to(x=two_x, y=two_y).wait(300).move_to(x=three_x,y=three_y).wait(300).move_to(x=five_x,y=five_y).wait(300).move_to(x=seven_x,y=seven_y).wait(300).move_to(x=eight_x,y=eight_y).wait(300).move_to(x=nine_x,y=nine_y).release().perform()
小结
1.实现的时候总是报错:
The coordinates provided to an interactions operation are invalid.
解决方案:在release后边加上wait,即可。这可是查了好多资料,才找到的解决办法,具体原因也有点蒙圈,等找到原因了,后期补上,或者有知道的大佬可以分享一下心得体会 。
期间想不用for循环了,直接写了两个一样的TouchAction还是报错,然后实在是搞不定了,第二天晚上决定既然可以画一个Z字形,要不把设置密码的文章改成解锁密码文章 ,前者需要画两个Z字形,后者需要画一个Z字形。而且刚好解锁,需要一个就可以,内心的小鬼在打架,最终还是理性打败了取巧和任性,硬着头皮解决遇到的各种问题,才有了这篇文章的产生。这也侧面的反应学习和工作是不能偷奸取巧的。
1 for i in range(2):
2 TouchAction(driver).press(x=212, y=296).wait(100)\
3 .move_to(x=148, y=0).wait(100)\
4 .move_to(x=148,y=0).wait(100)\
5 .move_to(x=-148,y=148).wait(100)\
6 .move_to(x=-148,y=148).wait(100)\
7 .move_to(x=148,y=0).wait(100)\
8 .move_to(x=148,y=0).wait(100) \
9 .release().wait(100).perform()
2.这段代码里面有俩个坑,呃,关键点:
(1)press方法中的坐标为绝对坐标,move_to方法中的坐标都是相对坐标,具体来说第一个move_to中的坐标相对于press方法中的坐标,第二个move_to方法中的坐标相对于第一个move_to方法中的坐标。以此类推下去,以前好像不是这个样子的。直接计算完就可以用了。宏哥期间犯的错误:
a.就是直接算完就用结果报错;然后查资料说是相对坐标;
b.然后把后边move_to 的坐标都相对第一个绝对坐标了,结果可想而知,还是报错。
继续查资料,才找到以上的解决办法了。
(2)wait是必须的:这里ms表示为毫秒,ms=100就是等待100毫秒。不用的话太快会出错
3.分成六等份,小伙伴们有点蒙圈,给小伙伴们看一幅比较直观的图
4. 好了,,终于搞定了,获得了新生。
【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
![](https://img-blog.csdnimg.cn/af6acde5fef948688e853163e68085a3.png)
四、App自动化项目实战
五、一线大厂简历
![](https://img-blog.csdnimg.cn/da130899855e439f8d9f538e9d396b42.png)
六、测试开发DevOps体系
七、常用自动化测试工具
![](https://img-blog.csdnimg.cn/262b329562404406bcab732e5f680348.png)
八、JMeter性能测试
九、总结(尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!
相关文章:
![](https://img-blog.csdnimg.cn/1b934526ee52476195f3be8365be53ee.png)
Appium+python自动化(二十八)- 高级滑动(超详解)
高级溜冰的滑动 滑动操作一般是两点之间的滑动,这种滑动在这里称其为低级的溜冰滑动;就是上一节给小伙伴们分享的。然而实际使用过程中用户可能要进行一些多点连续滑动操作。如九宫格滑动操作,连续拖动图片移动等场景。那么这种高级绚丽的溜…...
![](https://img-blog.csdnimg.cn/9d0a7ea3030a4f70a4dc02f9e0a96d8d.png)
github token使用方法
git remote set-url origin https://<githubtoken>github.com/<username>/<repositoryname>.git 在私有仓库的HTTPS的url上加入<githubtoken>即为token url,可以免ssh key登录...
![](https://www.ngui.cc/images/no-images.jpg)
Spring属性注解对配置项名称的自动转换
一、前言 在Spring中,我们经常需要将配置文件中的属性值注入到Java类中。Spring提供了两个主要的注解来实现这一功能:Value 和 ConfigurationProperties。其中 ConfigurationProperties支持将配置项名称与Java类中的属性名进行自动转换,包括…...
![](https://img-blog.csdnimg.cn/6369911301e14492bf08e9d459824596.jpeg)
Docker 安全 Docker HTTPS请求过程与配置
Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器(授权容器root用户拥有宿主机的root权限) 尽量不用 --network host 运行容器(使用 host 网络模式共享宿主机的网络命名空间) 尽量不在容器中运行 ssh 服务 尽…...
![](https://img-blog.csdnimg.cn/ef9a8f6cf94b467095e45f82571b6338.png)
DevOps(三)
CD(二) 1. 整体流程2. 环境准备1. jenkins安装2. 编译安装git3. docker安装4. docker-compose安装5. sonarqube安装6. harbor安装7. gitlab私服8. maven安装9. Nexus部署10. K8s部署3. 安装java及编写代码3.1 安装java3.2 安装IntelliJ IDEA3.3 安装tomcat3.4 安装maven3.5 c…...
![](https://www.ngui.cc/images/no-images.jpg)
AOP的妙用
一、改代码 自定义注解用于提示该代码已经在AOP中重构了 public interface ReviseToAop {// 用于记录修改状态String value() default ""; }使用注解(无意义,只是表名被修改) ReviseToAop("修改于:2023/7/30&quo…...
![](https://img-blog.csdnimg.cn/img_convert/8df63de3ecc488a3d3fff60c6e5bdec0.png)
CAN转ETHERCAT网关将CAN 总线和 ETHERCAT 网络连接方法
由于好多现场会出现将CAN总线的设备接到EtherCAT网络中,由于协议的不相同,不能直接进行连接,现需一种能同时兼容CAN 总线和ETHERCAT网络的一种设备,由此捷米JM-ECT-CAN 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要…...
![](https://img-blog.csdnimg.cn/061f6e15fe3744eaadf521cbf64bfc81.png)
【大数据趋势】7月30日 汇率,恒指期货的大数据趋势概率分析。
1. 数据源头之一 : 汇率变化 从程序模拟趋势来看,美元在持续弱势状态,周线上正在构建一个新的下跌趋势,而且正在反抽过程中,即将完成,如果没有外部干预,会顺势往下。从月线来看,高点逐步降低&a…...
![](https://img-blog.csdnimg.cn/774a60ee98dc461c8e53168013d7e7d1.png)
mac使用mvn下载node-sass 会Binary download failed, trying source
m1 上使用nvm 以下node的版本可以直接下载(Binary download,而不是 trying source)而不用切换mac cpu架构 zhiwenwenzhiwenwendeMBP cockpit % nvm install 14.15.5 Downloading and installing node v14.15.5... Downloading https://node…...
![](https://img-blog.csdnimg.cn/6cbcd6c17cec4dba9bb3c0f895f02fa2.png)
【C++】开源:Muduo网络库配置与使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…...
![](https://www.ngui.cc/images/no-images.jpg)
VCS ICO - Intelligent Coverage Optimization
ico是vcs提供的用于优化覆盖率的feature;一般用户通过dist solver bofore等约束了变量的随机概率,而ico会在用户约束的基础上,做一些自动“修正”,以此来优化随机激励,提高随机多样性,加速覆盖率收敛&#…...
![](https://img-blog.csdnimg.cn/0cf804d67f134149982033b1127337f5.png)
【分布式系统】分布式系统的8个谬误
网络可靠 对于分布式系统来说,网络、计算、存储是三大基石,系统之间进行拆分隔离之后,那么必定存在网络通讯,而网络是最不可靠的。 不管是从硬件层面还是软件层面来说,网络是不可靠的。(断电、配置错误、ID…...
![](https://img-blog.csdnimg.cn/ff192303f5ea4826b0871d40a13a711a.png)
tinkerCAD案例:25. 量角器 - 测量角度
tinkerCAD案例:25. 量角器 - 测量角度 原文 Now we’re going to make a protractor! A Protractor is one of the most basic, but essential, tools for making measurements. It is, then, surprising that the modern protractor is barely over 200 years ol…...
![](https://img-blog.csdnimg.cn/bd36e8520ecf4ba8b61cbfd4e7a85295.gif)
Flutter 使用texture_rgba_renderer实现桌面端渲染视频
Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频(本…...
![](https://www.ngui.cc/images/no-images.jpg)
linux虚拟机开机后桌面显示CentOS-7.5-x86盘片文件,并且无法远程连接虚拟机?
在虚拟机启动后遇到了显示CentOS-7.5-x86光盘片文件的问题,并且无法远程连接到虚拟机,有几个可能的解决方法: 检查虚拟机设置:确保虚拟机的网络适配器已正确配置,并且虚拟机配置的网络选项是桥接模式或 NAT 模式&#…...
![](https://img-blog.csdnimg.cn/8a014edcdc484fb4aa861c0859c94ad8.png)
【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
AutoConfigurationImportSelector 源码解析 引言主要内容1. ImportSelector 接口2. DeferredImportSelector 接口3. AutoConfigurationImportSelector 功能概述 总结 引言 上篇博文我们了解了 EnableAutoConfiguration 注解,其中真正实现自动配置功能的核心实现者 …...
![](https://www.ngui.cc/images/no-images.jpg)
系统学习Linux-MySQL数据库备份(四)
一、概述 数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方,一遍在数据库丢失或损坏时进行恢复,数据库备份是数据库管理中必不可少的一项工作,通过备份可以保护数据库中的数据和业务。 二、数据备份的…...
![](https://img-blog.csdnimg.cn/9c53983dd8c847509b434d1de3825375.png#pic_center)
具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)
6 实验 实验目的是验证以下几个问题: RT-1可以学习大规模指令数据,并且可以在新任务、对象和环境上实现zero-shot的泛化能力?训练好的模型可以进一步混合多种其他数据(比如仿真数据和来自其他机器人的数据)吗?多种方…...
![](https://www.learnfk.com/guide/images/wuya.png)
无涯教程-jQuery - load( url, data, callback)方法函数
load(url,data,callback)方法从服务器加载数据,并将返回的HTML放入匹配的元素中。 load( url, [data], [callback] ) - 语法 [selector].load( url, [data], [callback] ) 这是此方法使用的所有参数的描述- url - 包含请求发送到…...
![](https://www.ngui.cc/images/no-images.jpg)
【Shell】Shell编程之免交互
免交互:不需要人为控制就可以完成的自动化操作 自动化运维 Shell脚本和免交互是一个概念,但是两种写法 here document 使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令 是一种标准输入,只能接受正确的指令或命令&#x…...
![](https://img-blog.csdnimg.cn/a4a19be56326415ea71b4fd78652b53f.png)
从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷
系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API(第一章)从Vue2到Vue3【二】Composition API(第二章)从Vue2到Vue3【三】Composition API(第三章)从Vue2到Vue3【四】C…...
![](https://img-blog.csdnimg.cn/af698a3d0cea4147a99cc98058ba5a9b.png)
用C语言实现堆排序算法
1.设计思路 排序的思想将一个数组按递增的顺序进行排序,将数组的第一个位置空下(下标为0),因为会导致子节点和本身同一个结点(i和2i一致),每次堆排序在下标1的位置放上了最大值,然后…...
![](https://img-blog.csdnimg.cn/b02134bfb5b84d4b87e09de09822be87.png)
tauri在github上进行自动更新打包并发版过程,实战操作避坑
从网上找了很多很多的文章,结果还是入坑了,一个问题找了一天才解决: Error A public key has been found, but no private key. Make sure to set TAURI_PRIVATE_KEY environment variable. 596 ELIFECYCLE Command failed with exit code…...
![](https://img-blog.csdnimg.cn/ac3d36e884a44c7cbc930f51e268d840.png)
css中flex后文本溢出的问题
原因: 为了给flex item提供一个合理的默认最小尺寸,flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为: min-width: auto 水平flex布局 min-height:auto 垂直flex布局 解决办法&…...
![](https://www.ngui.cc/images/no-images.jpg)
restful接口设计规范[仅供参考]
1. 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。 https://www.example.org/api/2. 版本(Versioning) 应该将API的版本号放入URL。 http://…...
![](https://img-blog.csdnimg.cn/ddc572a844664775979884df6c70c33b.png)
Metabase 远程代码执行(CVE-2023-38646)
漏洞描述 Metabase是一款开源数据分析及可视化工具。它可允许用户连接至各种不同类型数据源,未经身份认证的攻击者可利用本漏洞在服务器上以运行 Metabase服务器的权限进行任意命令执行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩…...
![](https://img-blog.csdnimg.cn/8aba1c9868ca44b0a0a9670d0ced4921.png)
【TiDB理论知识 07】SQL执行流程
一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL,通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查,生成执行计划 发送给Executor,从TIKV获…...
![](https://img-blog.csdnimg.cn/a09d9bf3cb10417a9e3742ab2f7ed448.png)
微服务——服务异步通讯RabbitMQ
前置文章 消息队列——RabbitMQ基本概念容器化部署和简单工作模式程序_北岭山脚鼠鼠的博客-CSDN博客 消息队列——rabbitmq的不同工作模式_北岭山脚鼠鼠的博客-CSDN博客 消息队列——spring和springboot整合rabbitmq_北岭山脚鼠鼠的博客-CSDN博客 目录 Work queues 工作队列…...
![](https://www.ngui.cc/images/no-images.jpg)
事件冒泡、事件捕获和事件委托
原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 什么是事件冒泡、事件捕获和事件委托? 事件冒泡(Event Bubbling)、事件捕获(Event Capturing)和事件委托(Event Delegation&…...
![](https://www.ngui.cc/images/no-images.jpg)
WEB 典型安全功能说明
WEB 典型安全功能 认证Authentication 认证是指通过验证用户的身份来确认用户是否有权访问某个系统或资源。在Web安全中,认证是非常重要的一环,它可以防止未经授权的访问,保护用户的数据和系统的安全。 登录 登录是用户认证的常见方式之一…...
![](https://img-blog.csdnimg.cn/f79a26224fe240dbbc0a50153b5489f7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6buR6ams56iL5bqP5ZGY5a6Y5pa5,size_17,color_FFFFFF,t_70,g_se,x_16)
自适应网站什么做/seo是什么意思网络用语
系列文章目录 🍑软件测试功能到自动化学习路线图,2022年最新版技术栈 🍑软件测试01:从了解测试岗位职能和测试流程开始,附作业 🍑软件测试02:6大实际案例手把手教你设计测试点 🍑…...
![](/images/no-images.jpg)
做红包图片的网站/最近韩国电影片
1. 创建标准的表格Code:<table border"2" style"text-align:center"> <!表格的开始标签,定义边框为2,定义文本居中显示><tr> <!第1行开始标签><th>Head…...
![](/images/no-images.jpg)
重庆营销型网站随做的好处/无锡网站建设seo
明天就是教师节了,我们实验室的师兄姐弟们决定送给老师一件礼物,经过反复商议决定,礼物的范围被确定为绿色植物。于是今天上午,在烈日的阳光的照耀下,我们踏上了去往来太花卉的752路公共汽车。可谓千条万选,…...
![](http://www.thinksns.com/data/upload/ueditor/20171127/5a1bc785a8a75.jpg)
网站链接加密/枸橼酸西地那非片是什么
2019独角兽企业重金招聘Python工程师标准>>> ThinkSNS是国内知名的开源系统,主要功能有:微博(朋友圈)、即时聊天、直播、论坛、资讯、CMS、活动、频道、圈子、问答、打赏等主流社交功能应有尽有。 我们的服务包括 快速…...
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/sad.gif)
山西建设厅网站首页/网上推广怎么做
基本配置步骤: 一,下载对应的文件: 安装python ,http://www.python.org/ 下载scons-local ,http://sourceforge.net/projects/scons/files/scons-src/2.0.1/scons-local-2.0.1.zip 下载swtoolkit,http:/…...
![](/images/no-images.jpg)
网站开发意义/怎么建立企业网站免费的
使用VisualStudio2005TeamSystem进行单元测试[20]发表于:2010-05-13来源:作者:点击数:标签:单元使用VisualStudio2005TeamSystem进行 单元测试 [20] 软件测试 VS 2005 将显示一个进度栏,提供代码生成过程中…...