• selenium使用技巧


    标签(空格分隔): 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)')
  • 相关阅读:
    Gradle Gretty进行runAppDebug的Listening for transport dt_socket at address: 5005 的后续配置
    Oracle :value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: 519, maximum: 500)的解决方案
    js file对象 文件大小转换可视容易阅读的单位
    JS的Event各种属性级target/currentTarget/relatedTarget各种目录的解释
    浏览器控制台是否打开的一些措施的讨论
    eclipse启动指定jvm的版本
    IDEA terminal无法从vim的编辑模式转换为命令模式
    win7 64位系统在IronPython2.7 rc安装后运行出现"ipy64/ipy.exe"does not exist解决办法
    VS2010 插件 CSS3 IS 2.1.1 在win7 64位机子上安装小记
    Asp.net ajax 1.0 绑定drowdownlist时取值问题
  • 原文地址:https://www.cnblogs.com/surewing/p/9432241.html
Copyright © 2020-2023  润新知