标签(空格分隔): seleniumpython
咱们进行selenium的时候,就是经过webdriver,对浏览器作一些操做的:
webdriver,除了find操做,以外还有哪些方法和属性呢?web
- 1.获取当前窗口的title:
driver.title
什么是窗口的title呢?
例如打开百度:(关闭按钮,左边的“百度一下,你就知道”)就是title
- 问题:咱们获取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()
执行结果:
百度一下,你就知道
百度一下,你就知道测试
- 问题:
为何一次性执行的时候,会两次出现:百度一下,你就知道;结果是同样的?
而单步调试的时候是好的呢?
答案:
由于咱们的程序执行比较快,执行完第一步以后,百度的淘宝,百度尚未获取到淘宝网站的元素,因此就显示了百度的原来的;网站
遇到上述问题怎么解决呢?ui
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()
这样是否是达到效果了;url
- 可是问题来了?为何有了隐士等待了,还要sleep呢?
敲黑板 :切记,切记!!!!!!
implicity_wait()只针对find的方法有效,对获取界面title是没有效果的;因此这个地方他不会等,他通常是根据每一个条件查找元素,切记,implicity_wait()对find方法有效;
- 问题又来了,上述的若是用sleep怎么肯定等待多长时间呢?有没有更好的方法?
搜索:淘宝,咱们人来讲的话,是否是只要有搜索的结果出来了,就表示确定搜索的结果出来了,因此咱们能够吧写死的sleep能够变为这种方式:
咱们能够在代码,加入一行代码:
driver.find_element_by_id("")根据上的id 来定位;
从而替换掉写死的sleep()
- 你们要明白这个工做的一个原理就行了;
- driver.current_url获取当前窗口的地址栏:
这个你们指导就行了,用的不是特别的多;
- driver.get_screenshot_as_file('ss1.png')
截图并保存成为文件;
这种在什么状况下的会用到截图呢?
答案:就是在出错,也就是说出现bug的时候,由于自动化测试,人不一直看着的,若是把出错的内容,给保存下来,这样比较好容易定位;
- 通常自动化出问题,人仍是要复现并跟进一个下的,如上述的driver.get_screenshot_as_file('ss1.png') 这时候截图保存在哪里呢?
其实咱们是能够指定保存截图的路径的;
想要查看咱们的截图保存路径,能够查看pycharm的工做目录,就会可保存在文件的工做目录里面;
- 一样咱们也能够对元素进行截图:(对单个元素进行截图)
好比说:
ele=driver.find_element_by_id('kw')
例如:以下的定位元素:
咱们能够经过这个两个来定位:若是上述的方式能够定位,帮咱们节省一些时间,一般用于离本身很近的地方有ID的元素,实用这种方法;调试
实用上述截图来定位元素,有什么缺点呢?
Xpath:只要路径里面有个地方改动了,这样就很差维护;
2.有的时候,经过右键复制的,是不行的,下次进来的时候,他ID是会变的,code
- 一般不可见元素都是能够操做的 若是确实须要改变窗口的大小 size = driver.get_window_size() dirver.set_window_size(1100,size['height']) 滚动页面: driver.execute_script('window.scrollBy(250,0)')