element

Python Selenium之异常处理

亡梦爱人 提交于 2020-04-26 04:51:02
  自动化测试执行过程中,难免会有错误/异常出现,比如测试脚本没有发现对应元素,则会立刻抛出 NoSuchElementException 异常。这时不要怕,肯定是测试脚本或者测试环境哪里出错了!那如何处理才是关键?因为一般只是局部有问题,为了让脚本继续执行,so我们可以用try...except...raise处理并捕获异常。该捕获异常后可以打印出相应的异常原因,这样以便于分析异常原因。   下面将举例说明,当异常抛出后将信息打印在控制台,同时截取当前浏览器窗口,作为后续bug的依据给相应开发人员更好下定位问题。代码如下: 1 import unittest 2 from selenium import webdriver 3 from selenium.common.exceptions import NoSuchElementException # 导入NoSuchElementException 4 5 class ExceptionTest(unittest.TestCase): 6 def setUp(self): 7 self.driver = webdriver.Chrome() 8 self.driver.get( " https://www.baidu.com " ) 9 10 def test_exception(self): 11 driver = self

Leetcode题解——算法思想之排序

浪尽此生 提交于 2020-04-25 19:19:49
快速选择 堆 1. Kth Element 桶排序 1. 出现频率最多的 k 个元素 2. 按照字符出现次数对字符串排序 荷兰国旗问题 1. 按颜色进行排序 快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N 2 )。 堆 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素。这是因为我们要得到 k 个最小的元素,因此当遍历到一个新的元素时,需要知道这个新元素是否比堆中最大的元素更小,更小的话就把堆中最大元素去除,并将新元素添加到堆中。所以我们需要很容易得到最大元素并移除最大元素,大顶堆就能很好满足这个要求。 堆也可以用于求解 Kth Element 问题,得到了大小为 k 的最小堆之后,因为使用了大顶堆来实现,因此堆顶元素就是第 k 大的元素。 快速选择也可以求解 TopK Elements 问题,因为找到 Kth Element 之后,再遍历一次数组,所有小于等于 Kth Element 的元素都是 TopK Elements。 可以看到,快速选择和堆排序都可以求解 Kth Element 和 TopK

TopK问题:什么是TopK问题?用堆和快排这两种方式来实现TopK

岁酱吖の 提交于 2020-04-25 16:26:01
   目录 一、什么是Top K问题 二、Top K的实际应用场景 三、Top K的代码实现及其效率对比   1.用堆来实现Top K   2.用快排来实现Top K   3.用堆或用快排来实现 TopK 的效率对比    正文 一、什么是Top K问题?   给一个无序的数组,长度为N, 请输出最小 (或最大)的K个数。 二、Top K的实际应用场景   排行榜:用户数量有几百万, 但是只需要前100名的用户成绩。 要显示出来, 且这个排行榜是实时变化的。 三、Top K的代码实现    需求:给一个无序的数组,长度为N, 请输出最大的5个数。    1. 用堆来实现Top K——PriorityQueue(小顶堆)    (1)步骤梳理:     ①创建一个结点个数为 k 的小顶堆;     ②当数据量 < k 时,将数据直接放到这个小顶堆中,此时堆的顶结点是最小值;     ③当数据量 >= k时,每产生一个新数据都与堆的顶结点进行比较:       如果新数据 > 顶结点数据,则将顶结点删除,将新数据放到堆中,此时堆会进行排序,且维护了堆的总结点数为k; 如果新数据<顶结点数据,则不动。   (2)中心思想:使堆的总结点数维持在 k 个。   (3)代码实现: 1 @Test 2 public void getTopKByHeapInsertTopKElement() {

【java提高】---queue集合

大憨熊 提交于 2020-04-25 16:22:13
queue集合 什么是Queue集合? 答: Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。 新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。 一、认识queue 1、Queue 方法介绍 从上面来看,Queue(队列)接口继承自Collection,用来表示内部元素具有先后顺序的集合。除了基本的集合操作外,队列还提供了其他插入、删除和检查操作。Queue接口定义如下: public interface Queue<E> extends Collection<E> { E element(); boolean offer(E e); E peek(); E poll(); E remove(); } 每一个队列相关方法都提供了两种形式: 一种如果操作失败抛出异常,另一种如果操作失败返回一个特殊值(null或false) 。 Queue接口结构如下图所示: 操作 抛出异常 返回特殊值 插入 add(e) offer(e) 移除 remove() poll() 检查 element() peek() (1).add(E), offer(E) 在尾部添加: 他们的共同之处是建议实现类禁止添加 null 元素,否则会报空指针

【Java源码】集合类-队列Queue

こ雲淡風輕ζ 提交于 2020-04-25 16:22:01
一、描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器。可以模拟生活中依次排队这种场景。 下面是集合体系继承树: 二、Queue Queue和List一样都是Collection的子接口。 Queue源码定义: public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); } add(E e)/offer(E e) 将指定元素加入到队列尾部 remove() 返回队列头部元素并删除,如果队列为空,会抛NoSuchElementException poll() 返回队列头部元素并删除,如果队列为空,返回null element() 返回队列头部元素不删除,如果队列为空,会抛NoSuchElementException peek() 返回队列头部元素不删除,如果队列为空,返回null Queue的实现有PriorityQueue、ArrayDeque、LinkedList。其中ArrayDeque、LinkedList是实现的其子接口Deque。 三、Deque 从上面的继承图可以清楚的看到,Deque是Queue的子接口,它不仅是队列的数据结构

python+selenium之元素的八大定位方法

余生颓废 提交于 2020-04-25 16:21:08
以百度搜索框为例,先打开百度网页 1.点右上角爬虫按钮 2.点左下角箭头 3.讲箭头移动到百度搜索输入框上,输入框高亮状态 4.下方红色区域就是单位到输入框的属性: <input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd"> 元素定位:find_element_by_id() 1.从上面定位到的元素属性中,可以看到有个id属性:id="kw",这里可以通过它的id属性单位到这个元素。 2.定位到搜索框后,用send_keys()方法 元素定位:find_element_by_name() 1.从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。 说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框 元素定位:find_element_by_class_name() 1.从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。 元素定位:find_element_by_tag_name() 1.从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性

element-ui带输入建议的input框踩坑

情到浓时终转凉″ 提交于 2020-04-25 13:27:45
踩坑问题描述: 问题一: 获取到后端返回的数组,并将数组传入作为 results 传入 callback 后,焦点放在 输入框 上的时候,并未出现任何内容,只出现了一个不完整的空白框。 问题解决方案: 这个问题开始我以为是传进 callback 的 data 格式不对。Element官网上是这么写的: 我传入的是对象数组,是没问题的。 后来我仔细阅读了 Elemen t带建议查询输入框的 Demo 代码并查阅相关资料发现,输入建议列表的数据只来源于 data:[] 中的 value 字段!!! 于是,我将后端传回的 response 处理了,将 response 中需要展示的字段组成 {value:'输入建议'} 这种格式,问题解决。 searchAppNodeApi(searchQuery).then(response => { this .loadAll = response.data this .devEuiArr = []; for (let item of this .loadAll) { this .devEuiArr.push({"value1" : item.dev_eui}) } }) searchAppNodeApi() 是我请求后端的api方法,拿到请求成功的回调函数的 response 参数。但是, response 里面包含很多我不需要的字段

python+selenium二:定位方式

天大地大妈咪最大 提交于 2020-04-25 13:27:27
# 八种单数定位方式:element from selenium import webdriver import time driver = webdriver.Firefox() time.sleep(2) # 等待2秒 driver.get('https://www.baidu.com') 1、id定位:find_element_by_id() # 定位到输入框,输入“中文” time.sleep(2) driver.find_element_by_id('kw').send_keys('中文') 2、name定位:find_element_by_name() # 根据name定位到百度贴吧的输入框,输入“你好” driver.find_element_by_name('kw1').send_keys('你好') 3、class定位:find_element_by_class_name() # 当class唯一时,才能使用此方法 # 根据class属性找到输入框,输入“你好” driver.find_element_by_class_name('s_ipt').send_keys('你好') 4、根据标签名定位:find_element_by_tag_name() (由于标签名不唯一,不建议用此方法) driver.find_element_by_tag_name('body'

RobotFramework + Appium 移动自动化实现

泄露秘密 提交于 2020-04-25 09:55:03
  本次我们移动自动化实现路线大致是这样的: Python语言基础 —> Robot Framework测试框架 —> Android SDK和Genymotion模拟器 —> Appium API —> 开发移动自动化项目 一、环境搭建    1. 首先我们选择Python语言,我相信很多人都有这个疑问,为什么选择Python而不是Java?   因为RF核心框架使用Python实现的,虽然也可以在Jython(JVM)和 IronPython(.NET)上运行,但是Python运用更佳。    2. 再者我们选择RIDE编辑器;   虽然RIDE是“填表格”形式,看似有点low,但是却拥有非常丰富的库,也可以像编程一样写测试用例,也支持开发系统关键字。对于开发技术薄弱的测试人员来说也可以上手,使用比较简单。    3. 接着我们需要Android SDK;   因为需要用到Android SDK中的 uiautomatorviewer工具,它可以通过截屏并分析XML布局文件的方式,为用户提供控件信息查看服务。    4. 最后我们需要Appium服务。   因为Appium支持ios和android平台上的移动原生应用、移动Web应用和混合应用,它允许测试人员使用同样的接口、基于不同的平台写自动化测试代码,大大增加了测试套件间代码的复用性。    详情参考笔者另外两篇博文:  

【目录】LeetCode Java实现

久未见 提交于 2020-04-25 08:51:22
这里记录一下自己刷的LeetCode题目。 有些博客用英文阐述自己的思路和收获,相当于练习一下英文的表达能力。 比较好的题目有 加粗 。 题目以后将按题型分类,可以从目录寻找相关的分类。 数组 简单题 26. Remove Duplicates from Sorted Array 122. Best Time to Buy and Sell Stock II 189. Rotate Array 217. Contains Duplicate 136. Single Number (思想很好) 350. Intersection of Two Arrays II 66. Plus One 283. Move Zeroes 1. Two Sum 219. Contains Duplicate II 中等题 36. Valid Sudoku 48. Rotate Image 220. Contains Duplicate III 字符串 简单题 344. Reverse String 7. Reverse Integer 387. First Unique Character in a String 242. Valid Anagram 125. Valid Palindrome 28. Implement strStr() KMP 38. Count and Say 14.