淘优惠

淘优惠

web自动化测试实战

热门文章 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】


转载自python+【【淘密令】】自动化软件测试(第2章):WebDri【【微信】】自动化测试 - 博客园 (cnblogs.com)

目录

1.1 操作元素基本方法

1.1.1 打开网页

1.1.2 设置休眠

1.1.3 页面刷新

1.1.4 页面切换

1.1.5 设置窗口大小

1.1.6 截屏

1.1.7 退出

1.1.8 加载浏览器配置

1.2 常用8种元素定位(Firebug和firepath)

1.2.1 环境准备

1.2.2 查看页面元素

1.2.3 find_element_by_id()

1.2.4 find_element_by_name()?

1.2.5 find_element_by_class_name()

1.2.6 find_element_by_tag_name()

?1.2.7 find_element_by_link_text()

?1.2.8 find_element_by_partial_link_text()

1.2.9 find_element_by_xpath()

?1.2.10 find_element_by_css_selector()

1.3 xpath定位

1.3.1 xpath:属性定位

1.3.2 xpath:其它属性

1.3.3 xpath:标签

1.3.4 xpath:层级

1.3.5 xpath:索引

1.3.6 xpath:逻辑运算

1.3.7 xpath:模糊匹配

1.4 CSS定位

1.4.1 css:属性定位

1.4.2 css:其它属性

1.4.3 css:标签

1.4.4 css:层级关系

1.4.5 css:索引

1.4.6 css:逻辑运算

1.4.7 css:模糊匹配

1.5 【【微信】】辅助定位元素

1.5.1 安装【【微信】】

?1.5.2 直接运用

1.5.3 实践案例

1.6 操作元素(键盘和鼠标事件)

1.6.1 简单操作

1.6.2 submit提交表单

1.6.3 键盘操作?

1.6.4 鼠标悬停事件

1.7 多窗口、句柄(handle)

1.8 定位一组元素elements

1.9 iframe

1.10 select下拉框

1.11 alert\confirm\prompt

1.12 单选框和复选框(radiobox、checkbox)

1.13 table表格定位

1.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课)

1.14-1 加载Chrome配置

1.15 富文本(richtext)

1.16-1 非input文件上传(SendKeys)

1.16 文件上传(send_keys)

1.17 获取元素属性

1.18 爬页面源码(page_source)

1.19 cookie相关操作

1.20 绕过验证码(add_cookie)

1.21 JS处理滚动条

1.22 JS处理富文本

1.23 js处理日历控件(修改readonly属性)

1.24 js处理内嵌div滚动条

1.25 js处理多窗口

1.26 js解决click失效问题

1.27 18种定位方法总结

1.28 查看webdriver API(带翻译)

【附录】webdriver API(带翻译)

1.29 练习题1:去掉页面动态窗

1.30 练习题2:定位百度-更多产品

1.31 练习题3:获取百度联系词

1.32 js几种定位方法总结

1.33 定位的坑:class属性有空格

1.34 jquery定位(简直逆天)

前言 前面已经把环境搭建好了,从这篇开始,正式学习【【淘密令】】的webdriver框架。我们平常说的 【【淘密令】】自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。 本篇主要讲如何用Python调用webdriver框架的API,对浏览器做一些常规的操作,如打开、前进、后退、刷新、设置窗口大小、截屏、退出等操作。

1.从【【淘密令】】里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址

1.由于打开百度网址后,页面加载需要几秒钟,所以最好等到页面加载完成后再继续下一步操作 2.导入time模块,time模块是Python自带的,所以无需下载 3.设置等待时间,单位是秒(s),时间值可以是小数也可以是整数

1.有时候页面操作后,数据可能没及时同步,需要重新刷新 2.这里可以模拟刷新页面操作,相当于浏览器输入框后面的刷新按钮

1.当在一个浏览器打开两个页面后,想返回上一页面,相当于浏览器左上角的左箭头按钮。

2.返回到上一页面后,也可以切换到下一页,相当于浏览器左上角的右箭头按钮。

1.可以设置浏览器窗口大小,如设置窗口大小为手机分辨率540*960 2.也可以最大化窗口

1. 打开网站之后,也可以对屏幕截屏 2.截屏后设置指定的保存路径+文件名称+后缀

1.退出有两种方式,一种是close;另外一种是quit。 2.close用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口。 3.quit用于结束进程,关闭所有的窗口。 4.最后结束测试,要用quit。quit可以回收c盘的临时文件。

掌握了浏览器的基本操作后,接下来就可以开始学习元素定位了,元素定位需要有一定的html基础。没有基础的可以按下浏览器的F12快捷键先看下html的布局,先了解一些就可以了。

启动浏览器后,发现右上角安装的插件不见了,这是因为webdriver启动浏览器时候,是开的一个虚拟线程,跟手工点开是有区别的,【【淘密令】】的一切操作都是模拟人工(不完全等于人工操作)。

加载Firefox配置

? ?有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用firebug在打开的页面上继续定位页面元素,调试起来不方便 。加载浏览器配置,需要用FirefoxProfile(profile_directory)这个类来加载,profile_directory既为浏览器配置文件的路径地址。

一、遇到问题 1.在使用脚本打开浏览器时候,发现右上角原来下载的插件firebug不见了,到底去哪了呢? 2.用脚本去打开浏览器时候,其实是重新打开了一个进程,跟手动打开浏览器不是一个进程。 所以没主动加载插件,不过【【淘密令】】里面其实提供了对应的方法去打开,只是很少有人用到。

二、FirefoxProfile 1.要想了解【【淘密令】】里面API的用法,最好先看下相关的帮助文档打开cmd窗口, 输入如下信息:

->python ->from 【【淘密令】】 import webdriver ->help(webdriver.FirefoxProfile)

Help on class FirefoxProfile in module 【【淘密令】】.webdriver.firefox.firefox_profile: class FirefoxProfile(builtin.object) | ?Methods defined here:

| | ?init(self, profile_directory=None) | ? ? ?Initialises a new instance of a 【【微信】】 | ? ? | ? ? ?:args: | ? ? ? - profile_directory: Directory of profile that you want to use. | ? ? ? ? This defaults to None and will create a new | ? ? ? ? directory when object is created.

2.翻译过来大概意思是说,这里需要profile_directory这个配置文件路径的参数 3.profile_directory=None,如果没有路径,默认为None,启动的是一个新的,有的话就加载指定的路径。

三、profile_directory 1.问题来了:Firefox的配置文件地址如何找到呢? 2.打开Firefox点右上角设置>?(帮助)>故障排除信息>显示文件夹

3.打开后把路径复制下来就可以了: C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default

四、启动配置文件 1.由于文件路径存在字符:\ ,反斜杠在代码里是转义字符,这个有点代码基础的应该都知道。 不懂什么叫转义字符的,自己翻书补下基础吧! 2.遇到转义字符,为了不让转义,有两种处理方式: 第一种:\ (前面再加一个反斜杠)

第二种:r”\"(字符串前面加r,使用字符串原型)

五、参考代码:

# coding=utf-8 from 【【淘密令】】 import webdriver # 配置文件地址 profile_directory = r'C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'# 加载配置配置 profile = webdriver.FirefoxProfile(profile_directory) # 启动浏览器配置 driver = webdriver.Firefox(profile)

?其实很简单,在调用浏览器的前面,多加2行代码而已,主要是要弄清楚原理。

前言? 元素定位在firefox上可以安装Firebug和firepath辅助工具进行元素定位。

1.浏览器选择:Firefox 2.安装插件:Firebug和【【淘密令】】(设置》附加组件》搜索:输入插件名称》下载安装后重启浏览器) 3.安装完成后,页面右上角有个小爬虫图标 4.快速查看xpath插件:XPath Checker这个可下载,也可以不用下载 5.插件安装完成后,点开附加组件》扩展,如下图所示

以百度搜索框为例,先打开百度网页 1.点右上角爬虫按钮 2.点左下角箭头 3.将箭头移动到百度搜索输入框上,输入框高亮状态 4.下方红色区域就是单位到输入框的属性:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">

1.从上面定位到的元素属性中,可以看到有个id属性:id="kw",这里可以通过它的id属性定位到这个元素。 2.定位到搜索框后,用send_keys()方法,输入文本。

?1.从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。 说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框

1.从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。

1.从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input。 2.很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错。

1.定位百度页面上"hao123"这个按钮

查看页面元素:

<a class="mnav" target="_blank" href="">hao123</a>

2.从元素属性可以分析出,有个href?= "

说明它是个超链接,对于这种元素,可以用以下方法:

1.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了

2.如“hao123”,只需输入“ao123”也可以定位到

1.以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决。 2.xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath。

?3.按照上图的步骤,在【【淘密令】】插件里copy对应的xpath地址。

1.css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解 2.打开【【淘密令】】插件选择css 3.定位到后如下图红色区域显示

总结: 【【淘密令】】的webdriver提供了18种(注意是18种,不是8种)的元素定位方法,前面8种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。 前八种是大家都熟悉的,经常会用到的:

1.id定位:find_element_by_id(self, id_) 2.name定位:【【微信】】lf, name) 3.class定位:find_element_by_class_name(self, name) 4.tag定位:find_element_by_tag_name(self, name) 5.link定位:find_element_by_link_text(self, link_text) 6.partial_link定位find_element_by_partial_link_text(self, link_text) 7.xpath定位:find_element_by_xpath(self, xpath) 8.css定位:find_element_by_css_selector(self, css_selector)

这八种是复数形式(1.8和1.27章节有介绍)

9.id复数定位【【微信】】(self, id_) 10.name复数定位【【微信】】lf, name) 11.class复数定位find_elements_by_class_name(self, name) 12.tag复数定位find_elements_by_tag_name(self, name) 13.link复数定位【【微信】】_text(self, text) 14.partial_link复数定位find_elements_by_partial_link_text(self, link_text) 15.xpath复数定位【【微信】】h(self, xpath) 16.css复数定位【【微信】】elector(self, css_selector

这两种是参数化的方法,会在以后搭建框架的时候,会经常用到PO模式,才会用到这个参数化的方法(将会在4.2有具体介绍)

17.【【微信】】elf, by='id', value=None) 18.【【微信】】elf, by='id', value=None)

前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板࿰


JZFZ·城市更新 | 华轲:基准有道

zan城,城みちる,诚城建设,城成置业有限公司

存量时代,增量价值

探索存量时代下城市更新的发展之路

- JZFZ・城市更新系列 -

旨在立足于当下时代背景与JZFZ的自身实践

记录中国当代建筑师对于城市更新的思考

这里所呈现的不止是空间的改造

而是城市文化的复兴与本体状态的回归

更是人作为城市主体的复兴

亦是通过弥合旧有空间与当代社会关系

而协同创新的共生机制

JZFZ城市更新事业部总监

国家一级注册建筑师、高级工程师

城市更新的话题在今天备受瞩目

如何留住城市的记忆?

什么是城市更新3.0版本?

城市更新需要哪些人参与?

如何激活城市,重塑生活?

如何避免千篇一律的“网红尴尬,让设计产生递升价值?

……

【【微信】】 

-

让城市留下记忆

城市更新自产业革命以来一直都是大家所关注的重要课题,是一个国家城镇化水平进入一定发展阶段后面临的主要任务。中国城市更新自1949年发展至今,在积极推进城镇化的过程中,其内涵日益丰富,外延不断拓展。由于不同时期发展背景、面临问题、更新动力以及更新制度的差异,其更新的目标、内容以及采取的更新方式、政策、措施亦相应发生变化,呈现出不同的阶段特征。

琴台路文化艺术城市品牌策划?JZFZ DESIGN

我国经历了从“拆-改-留”为旗帜的城市更新1.0时代过渡到以“留-改-拆”语境下的城市更新2.0时代,从一味强调“新”到回归对传承的重视。

琴台路文化艺术城市品牌策划?JZFZ DESIGN

当下城市更新的意义和价值在于改变旧有的1.0和2.0的模式。这种驱动的模式其实是抹杀了各个城市、地域的特色和文化,以及植根于市民当中的一些情感连接点和记忆点。

我作为成都人,除了我的中学还在以外,其他的小学、幼儿园都不在了,而且小时候住的那些房子以及周边的环境全都消失了,想要找到小时候生活的痕迹几乎都不可能了。在我看来,城市更新的意义和价值除了重新焕发城市应有的活力和魅力之外,还应该让市民有可追溯可锚定的一些记忆和情感点,这就是城市更新3.0版本我们需要做的事情。

四方“共商、共建、共治、共享”

我国的城市更新也存在一些问题,包括只注重短期经济利益的再分配,忽视城市品质、功能和内涵提升等,甚至还可能破坏老城区原有的商业活力。如何去避免这些问题?我们要把城市当作有机生长的生命体看待,当机体出现问题,以前的建筑、区块不能再满足现代的消费需求,改造的必要性就可以探讨和研究,进行城市更新也是城市发展到一定阶段必然的结果。

但城市更新一定要有目的性,实现三个效益的共赢,既要有经济效益,也要有社会效益和环境效益。过去的大拆大建类城市更新是对城市原貌和肌理非常大的破坏,还破坏了城市的居住生态,排挤了原居民或租户。另外,我们在城市更新过程中也存在不尊重历史文化、不尊重市场的情况,以政府的长官意志来指导更新,那就可能破坏原来“活态”的生活生产,城市变成“布景”式的虚假。

在做城市更新项目时,要想处理好各种关系,不能为更新而更新,而是为了城市更具活力和更有发展而更新,除了经济效益外,还要格外重视社会效益、社会公平。所以希望提倡四方共同参与,第一是“政府”,第二是“开发商”,第三是“居民个体”,第四是“业主企业”。他们要共同参与,要有相对对等的话语权,这里很重要的一点是四方都要有出资。现在我们做一些旧城改造,特别是老旧小区改造的时候,会遇到居民不配合群众有抵触情绪的情况,他们认为改造影响了正常生活,施工的时候会发出噪音灰尘,甚至担心施工过程中会造成安全隐患。这种现象跟居民对“更新”这件事参与感太弱,获得感不强有很大关系,居民往往会认为外立面改好光鲜了过后,自己并没有受益,而是政府的面子工程,或开发商的商业利益。

这四方一定要真真正正的一起来参与到更新中,并且进行共商、共建、共治、共享。(共商:更新之前,四方要有一个平台组织在一起商量;共建:有钱出钱,有力出力;共治:大家共商,共建了之后一起去治理并更好的维护运营;共享:前面三个步骤完成之后,一起去享受所带来的好处。)

激活城市 重塑生活

猛追湾项目是融合EPC+O(Operation运营)的新型投资开发模式下的城市更新3.0版本,所谓3.0即基于城市传承的物质载体,通过空间梳理、形象提升和街道一体化设计,改变过去大拆大建的旧改策略,避免千篇一律的“网红尴尬”,同样达到激活城市活力,赋能原生产业的目标。

设计是从梳理城市功能来入手。整个片区比较大,以339为界,把猛追湾分成了上下两个湾区,上湾区以“耍”(成都方言,意娱乐消费)和文化体验为主,下湾区主要以“吃”为主。定位这两个特质以后,我们以“点、线、面、业”为工作思路开展后续工作。

首先解决停车问题。通过考察之后,我们发现望平街、天祥街车流量很大,但是停车位严重不足,要让这里的商家能够更好的经营,我们需要解决过来的客人有地方停车并且安心停车。我们跟政府、街道、开发商到处去协调周边的一些停车场停车位,分为临时停放和分时停放。

第二个是“还路于人”。我们希望把滨河空间打造成全步行的路段,但是全步行的路段会涉及到小区,我们通过梳理小区的车行出入口,把原来的停车棚拆除,把车行出入口换一个方向,把滨江的整个空间还给人。打通原本封闭的界面,增加街道与滨河的互动,营造充满生气的连通空间。

第三,在店铺设计时,运用“一店一策”的设计策略。打开了滨江的公共空间,我们希望这些商铺,不只是白天开门,然后晚上再把玻璃门或者是卷帘门锁上的状态;而是以更开放的姿态呈现,店铺内和店铺外的连接不要那么明确。比如把店铺的外边缘位置变成吧台,有点类似于麦当劳的甜品站,店家在里边把饮料或冰淇淋递出来,客人就可以直接直接靠在吧台上吃。

一部分店家看我们正在做施工的时候,他们开始自发的更新装修自己的店面,然后跟我们一样设计的比较开放,利用更多的外部空间,然后来做一些外摆,并且他们的设计品质也很高,有些定制化的设计甚至比我们的都好。

通过做猛追湾项目,我们也从中也总结出一些经验教训。例如,现在在做汪家拐和琴台路项目的时候,我们会主动的去推动甲方创造对话平台和对话机会,让商家和住户能够把自己的一些想法表达出来。设计每一条巷子时,首先都会先去当顾客,去逛商家,甚至去消费,跟服务员聊聊经营状况,有没有感觉哪些地方不舒适,然后再由街道组织去跟商家老板谈,看老板有什么需求;通过这样的方法,他们希望获取到一个比较全面而立体的认识,这对之后的设计会很有帮助。

猛追湾项目围绕在地文化挖掘、特色文化彰显、时尚魅力表达三方面,结合政府、投资运营方、入驻商家、原住居民四方“共商、共建、共治、共享”的工作方法,实现拨动猛追湾城市更新的引擎效应,将单纯“政府推动”向“自发更新”下沉、深入进行下去。

更新不只在于让城市更加漂亮,而是为了城市更美好的骄傲和期盼。更新让城市更有活力,让生活在这里的市民生活得更加幸福,让工作在这的各行业人员更有归属感。基准方中深信设计能为城市、社会持续创造价值,秉持城市永葆活力的深层逻辑是人口结构的持续更新,从人的根本需求、城市的需求出发,我们通过设计为城市注入魅力新动能。


..免费互助群微信二维码2023,免费互助群微信二维码2023,天猫邀请助力在哪里看,想进2023 天猫618 年中大促手机天猫互助群在哪里找 2023 618天猫狂欢盛典免费互助群微信二维码2023 2023 618淘宝理想生活狂欢季天猫邀请助力在哪里看 的小伙伴,关注加好友,加入互助群