文档章节

selenium使用技巧

o
 osc_1ee7cxmx
发布于 2018/08/06 19:55
字数 1012
阅读 8
收藏 0

精选30+云产品,助力企业轻松上云!>>>

标签(空格分隔): selenium


我们进行selenium的时候,就是通过webdriver,对浏览器做一些操作的: webdriver,除了find操作,之外还有哪些方法和属性呢?

  • 1.获取当前窗口的title: driver.title 什么是窗口的title呢? 例如打开百度:(关闭按钮,左边的“百度一下,你就知道”)就是title 百度tilte.png-48.5kB
  • 问题:我们获取title有什么作用呢? 答: 1.进行判断,是不是自己要测试的网页; 2.title也是测试的时候要测试的内容之一,也是一个检查点,我们通过driver.title来获取他,就可以进行判断了; 3.title会随着网页的跳转不断的变化的,我们在测试的时候,经常性做检查;

问题:

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
print(driver.title)
driver.find_element_by_id('kw').send_keys('淘宝')
print(driver.title)
driver.quit()

执行结果: 百度一下,你就知道 百度一下,你就知道

  • 问题: 为什么一次性执行的时候,会两次出现:百度一下,你就知道;结果是一样的? 而单步调试的时候是好的呢?

答案: 因为我们的程序执行比较快,执行完第一步之后,百度的淘宝,百度还没有获取到淘宝网站的元素,所以就显示了百度的原来的;

遇到上述问题怎么解决呢?

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
print(driver.title)
driver.find_element_by_id('kw').send_keys('淘宝')
driver.sleep(2)
print(driver.title)
driver.quit()

这样是不是达到效果了;

  • 但是问题来了?为什么有了隐士等待了,还要sleep呢? 敲黑板 :切记,切记!!!!!! implicity_wait()只针对find的方法有效,对获取界面title是没有效果的;所以这个地方他不会等,他一般是根据每个条件查找元素,切记,implicity_wait()对find方法有效;
  • 问题又来了,上述的如果用sleep怎么确定等待多长时间呢?有没有更好的方法? 搜索:淘宝,我们人来说的话,是不是只要有搜索的结果出来了,就表示肯定搜索的结果出来了,所以我们可以吧写死的sleep可以变为这种方式: 8C6E@U~1O}7LYY7R6J$F{D8.png-84.7kB 我们可以在代码,加入一行代码: driver.find_element_by_id("")根据上的id 来定位; 从而替换掉写死的sleep()
  • 大家要明白这个工作的一个原理就好了;
  • driver.current_url获取当前窗口的地址栏: dizhi.jpg-256.9kB 这个大家指导就好了,用的不是特别的多;
  • driver.get_screenshot_as_file('ss1.png') 截图并保存成为文件; 这种在什么情况下的会用到截图呢? 答案:就是在出错,也就是说出现bug的时候,因为自动化测试,人不一直看着的,如果把出错的内容,给保存下来,这样比较好容易定位;
  • 一般自动化出问题,人还是要复现并跟进一个下的,如上述的driver.get_screenshot_as_file('ss1.png') 这时候截图保存在哪里呢? 其实我们是可以指定保存截图的路径的; 想要查看我们的截图保存路径,可以查看pycharm的工作目录,就会可保存在文件的工作目录里面;
  • 同样我们也可以对元素进行截图:(对单个元素进行截图) 比如说: ele=driver.find_element_by_id('kw')

实用技巧2:

例如:如下的定位元素: image.png-207.7kB image.png-70.8kB 我们可以通过这个两个来定位:如果上述的方式可以定位,帮我们节省一些时间,通常用于离自己很近的地方有ID的元素,实用这种方法;

实用上述截图来定位元素,有什么缺点呢? Xpath:只要路径里面有个地方改动了,这样就不好维护; 2.有的时候,通过右键复制的,是不行的,下次进来的时候,他ID是会变的,

常见的:

  • 通常不可见元素都是可以操作的 如果确实需要改变窗口的大小 size = driver.get_window_size() dirver.set_window_size(1100,size['height']) 滚动页面: driver.execute_script('window.scrollBy(250,0)')
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

如何将div放置在其容器的底部? - How can I position my div at the bottom of its container?

问题: Given the following HTML: 鉴于以下HTML: <div id="container"> <!-- Other elements here --> <div id="copyright"> Copyright Foo web designs </div> </div> I would like #cop......

富含淀粉
今天
10
0
unity列表控件Horizontal/Vertical/Grid Layout Group用法介绍

1. Grid Layout Group 为Panel控件添加Grid Layout Group,子控件为四个按钮,分别为Grid,Calendar,Gear,User: 默认属性为 为方便演示,按钮的底色为控件自带image,按钮上面的图标为其子...

路过暴风
今天
19
0
Distinct()与lambda? - Distinct() with lambda?

问题: Right, so I have an enumerable and wish to get distinct values from it. 是的,所以我有一个可枚举的,并希望从中获得不同的值。 Using System.Linq , there's of course an ext......

法国红酒甜
今天
16
0
学习编写编译器[关闭] - Learning to write a compiler [closed]

问题: Preferred languages : C/C++, Java, and Ruby. 首选语言 :C / C ++,Java和Ruby。 I am looking for some helpful books/tutorials on how to write your own compiler simply for......

技术盛宴
今天
17
0
OSChina 周一乱弹 —— 毛巾又怎么样?!我在乎的是大姐姐温柔的怀抱!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雨 因你而下,于你而止》- Seto 手机党少年们想听歌,请使劲儿戳(这里) @Dan...

小小编辑
今天
48
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部