Selenium学习007-使用技巧


Selenium学习笔记目录


webdriver对象的一些方法

  • 获取某个元素的属性值
# 获取选定元素对应的链接
ele.get_attribute("href")
  • 获取当前窗口的title
driver.get('https://www.baidu.com/')
print(driver.title)
driver.find_element_by_id('kw')
print(driver.title)
  • 获取当前窗口的地址栏url地址
    driver.current_url

  • 随着用户的操作,title和current_url会变化

  • 截屏-全部屏幕

driver.get_screenshot_as_file('ssl.png')
  • 截屏-某个元素
ele = driver.find_element_by_id('search')
ele.screenshot_as_png('serch.png')

切换窗口

  • 切换到新的窗口里面操作

    • 循环遍历所有的窗口 driver.window_handles
    • driver.switch_to.window(handle)方法切入新窗口
    • 检查该窗口特点,是否为要切入的那个
  • 切换到最初的窗口

    • 保存主窗口的handle
  • 关闭窗口

    • close方法
    • quit()关闭整个浏览器
  • 示例

    # 点击某个元素,打开了一个新的窗口
    # 保存主窗口handle
    mainWindow = driver.current_window_handle
    print(driver.window_handles)
    for handle in driver.window_handle:
        # 切换到新窗口
        driver.switch_to.window(handle)
        # 检查是否是我们要进入到window
        if '百度' in driver.title:
            break
    # 进行操作
    pass
    # 切换到主窗口
    driver.switch_to.window(mainWindow)
    # 进行操作
    pass
    

弹出对话框

  • 对话框一般来说有三种:
    • alert 简单通知(一个按钮)
    • confirm (确定,取消)
    • prompt (输入内容,确定,取消)
  • 操作方法
driver.switch_to.alert.accept() # 点击ok
driver.switch_to.alert.text # 得到对话框内容
driver.switch_to.alert.getText() # 得到对话框的内容
driver.switch_to.alert.dismiss() # 点击Cancel
driver.switch_to.alert.send_keys() # 输入内容
# alert = driver.switch_to.alert() # 获取弹框
  • alert弹窗和html元素弹框

    • alert弹窗,用上述方法
    • html弹框,查找定位相关元素进行操作
  • 如何判断alert弹窗和html弹框

    • 点击F12,查看是否可以获得该元素
  • 页面含有input元素,通过插入文件到方式input元素win32com.client

  1. 直接发送键盘消息給 当前应用程序。
  2. 前提是浏览器必须是当前应用(放在最上层,浏览器运行后不要操作
import win32com.client
shell = win32com.client.Dispath('WScript.Shell')
shell.Senkey(r'd:\p1.jpg' + '\n')

刷新页面,前进,后退

  • 页面刷新 refresh
  • 前进 forward
  • 后退 back
driver.refresh()
driver.forward()
driver.back()

使用技巧

  • 易消失元素的查看技巧
    • 鼠标移到该元素上面才会出现
    • 鼠标移开就会消失
    • 5秒后冻结页面setTimeout(function(){debugger;},5000)
      233.gif

浏览器定位元素 copy selector

  • 获取元素的方法 css xpath
  • 取巧:选中元素,右键点击copy,选择copy selector,或者选择copy xpath

    上层节点有id时,此方法比较方便,否则可能会生成比较长的路径;
    路径太长时,后期html中被修改的可能性比较大,不好维护
    此方法并不适用于所有情况,慎用

  • 动态的id不可使用

异常捕获,确保chrome进程退出

  • 切换到新的窗口里面操作
  • 使用try...finally...
    try:
        # 可执行代码
    except:
        print()
    finally:
        driver.quit()
    

特殊动作

  • ActionChains 类按下,移动,拖动等
    • acInstance.action1().action2().actionN().perform()
  • 移动到某个元素上面
    • ActionChains(driver).move_to_element(ele).perform()
    from selenium.webdriver.common.action_chains import ActionChains
    ac = ActionChains(driver)
    ac.move_to_element(driver.find_element_by_id('zxnav_1')).perform()
    
  • 一次性输入多个input内容
    t1 = driver.find_element_by_id('t1')
    t2 = driver.find_element_by_id('t2')
    t3 = driver.find_element_by_id('t3')
    from selenium.webdriver.common.action_chains import ActionChains
    ac = ActionChains(driver)
    ac.click(t1).send_key('1').click(t2).send_key('2').click(t3).send_key('3').perform()
    

页面元素不可见

  • 通常不可见元素都是可以操作的
  • 如果确实需要改变窗口大小
    # 获取窗口大小,返回的size是字典(宽度和高度)
    size = driver.get_window_size()  
    # 改变大小,()里对应的分别是宽度和高度,数字对应的是像素,size['height']表示保持原高度不变
    driver.set_window_size(1100,size['height']) 
    
  • driver.max... 窗口最大化
  • 滚动页面
    # X坐标的值,Y坐标的值
    # 正数往下往右移动,负数往上往左移动
    driver.execute_script('window.scrollBy(250,0)')
    # 可在浏览器的console中输入window.scrollBy(250,0),以查看是否能滚动到自己想要的位置
    

渲染

- 后端渲染
- 前端渲染
- 前端渲染问题引起的报错:statle element reference
- 解决方法:获取内容前,sleep一下

合理使用半自动化

  • 图形界面自动化的难度是比较大的
    • 模拟难(12306输入验证码...)
    • 检查难(检查logo、布局等...)
  • 用半自动化的方法
    -难自动化的操作,都提示(beep)让人去做
    import winsound
    winsound.Beep(1500,3000) # 发出提示音
    
    • 其余部分:自动化 去做
  • 自动化的目的:提高测试效率

自动化面对的问题

  • 如何组织我们的自动化脚本?都放在一个大目录里面?
  • 一次测试开始了,如何选择测试脚本去执行?难道是手动的一个个运行这些脚本?
  • 每个测试脚本中,各个检查点是否通过,如何在测试结果里面清晰的反馈
  • 一些通用功能的实现如何以库的形式组织起来,供各个脚本使用
  • 执行结果如何以容易查看的报告的形式提交给别人查阅
  • 以上这些都可以由自动化测试框架解决
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容