美文网首页
web自动化--操作

web自动化--操作

作者: xiaohan_zhang | 来源:发表于2020-05-12 13:44 被阅读0次
一、操作元素
  • 清空数据
    driver.find_element_by_id('kw').clear()
  • 输入数据
    driver.find_element_by_id('kw').send_keys('央视网')
  • 点击
    driver.find_element_by_id('su').click()
  • 上传文件
    driver.find_element_by_css_selector('#upfile').send_keys('文件路径')
二、操作浏览器
  • 浏览器最大化
    driver.maximize_window()
  • 设置窗口大小
    driver.set_window_size(600, 520)
  • 设置浏览器窗口位置
    driver.set_window_position(200, 100)
  • 后退
    driver.back()
  • 前进
    driver.forward()
  • 刷新
    driver.refresh()
  • 关闭当前窗口
    driver.close()
  • 关闭浏览器驱动对象
    关闭webdriver启动的所有窗口
    driver.quit()
  • 获取页面title
    driver.title
    一般为判断上一步操作是否成功
  • 获取页面url
    driver.current_url
    一般为判断上一步操作是否成功
三、获取元素信息
  • 获取元素的大小
    driver.find_element_by_id('1').size
  • 获取元素的文本
    driver.find_element_by_id('1').text
  • 获取元素在屏幕中的位置
    driver.find_element_by_id('1').location
  • 获取元素属性值
    driver.find_element_by_id('1').get_attribute('fk')
    判断一组元素是否为想要的元素,或判断元素属性值是否正确
  • 判断元素是否可见
    driver.find_element_by_id('1').is_displayed()
  • 判断元素是否可见
    driver.find_element_by_id('1').is_enabled())
  • 判断元素是否选中
    driver.find_element_by_id('1').is_selected())
  • 获取包括元素在内的html内容
    driver.find_element_by_id('1').get_attribute('outerHTML')
  • 获取元素内部的html
    driver.find_element_by_id('1').get_attribute('innerHTML')
四、鼠标操作

from selenium.webdriver.common.action_chains import ActionChains

  • 获取鼠标操作对象
    action = ActionChains(drive)
  • 执行鼠标操作
    perform()
  • 右击
    action.context_click()
action.context_click(drive.find_element_by_id('mytxtdafdfasdf')).perform()
  • 双击
    action.double_click()
action.double_click(drive.find_element_by_css_selector('div.gwA18043_ind01')).perform()
  • 悬停
    action.move_to_element()
action.move_to_element(drive.find_element_by_css_selector('#lmdq a')).perform()
  • 拖动
    action.drag_and_drop(source, target)
    source: 源元素 要拖动的元素
    target: 目标元素 要拖动到的元素
    action.drag_and_drop_by_offset(source, xoffset, yoffset)
    source: 源元素 要拖动的元素
    xoffset, yoffset: 移动到的位置
五、键盘操作

from selenium.webdriver.common.keys import Keys

  • 删除
    send_keys(Keys.BACK_SPACE)
  • 空格
    send_keys(Keys.SPACE)
  • Tab键
    send_keys(Keys.TAB)
  • 回退键ESC
    send_keys(Keys.ESCAPE)
  • 回车
    send_keys(Keys.ENTER)
  • 全选
    send_keys(Keys.CONTROL, 'a')
  • 复制
    send_keys(Keys.CONTROL, 'c')
  • 粘贴
    send_keys(Keys.CONTROL, 'v')
  • 剪切
    send_keys(Keys.CONTROL, 'x')
六、元素等待

在定位页面元素时,如果未找到,会在指定时间内等待的过程。

  • 隐式等待
    针对全局有效
    参数秒
    driver.implicitly_wait(10)
    在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。超时会抛出NoSuchElementException异常。
  • 显式等待
    针对单个元素有效
    明确的要等到某个元素出现或者某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,则NoSuchElementException抛异常。
    from selenium.webdriver.support.ui import WebDriverWait
    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
    element = WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(
        lambda x: x.find_element_by_id('kw')
    )
    element.send_keys('海贼王')
七、选择框
  • 下拉框-单选
    from selenium.webdriver.support.ui import Select
# 找到select元素
select = Select(driver.find_element_by_css_selector('#ss_single'))
select.select_by_value('小雷老师')
select.select_by_index(2)
select.select_by_visible_text('小雷老师')
  • 下拉框-多选
select = Select(wd.find_element_by_css_selector('#ss_multi'))
# 全不选
select.deselect_all()
select.select_by_value('小雷老师')
select.select_by_index(0)
select.select_by_visible_text('小凯老师')
  • radio 单选框
radio = wd.find_element_by_css_selector('#s_radio input[checked="checked"]')
# 点选小雷老师
wd.find_element_by_css_selector('#s_radio input[value="小雷老师"]').click()
  • checkbox 多选框
checkboxs = wd.find_elements_by_css_selector('#s_checkbox input[checked="checked"]')
# 为了确保把所有想选的都选中,把所有被选中的都点一遍,变成未选中状态,然后再去选择
for checkbox in checkboxs:
    checkbox.click()
wd.find_element_by_css_selector('#s_checkbox input[value="小雷老师"]').click()
wd.find_element_by_css_selector('#s_checkbox input[value="小凯老师"]').click()
八、弹出框
  • alert 警告框
alert = driver.switch_to.alert
# 点击确定按钮
alert.accept()
# 获取alert文本
alert.text
  • confirm 确认框
# 点击确定按钮
driver.switch_to.alert.accept()
# 点击取消按钮
driver.switch_to.alert.dismiss()
  • prompt 提示框
prompt = driver.switch_to.alert
# 输入信息
prompt.send_keys('web自动化')
# 点击确定按钮  提交
prompt.accept()
# 取消按钮
prompt.dismiss()
九、滚动条

js脚本实现

# 0:左边距  1000:上边距   单位像素
js = "window.scrollTo(0, 1000)"
# 调用js代码
driver.execute_script(js)
十、窗口切换
  • iframe切换
wd = webdriver.Chrome()
wd.get('http://cdn1.python3.vip/files/selenium/sample2.html')
wd.implicitly_wait(5)
# 切换到iframe中,参数id或name属性值
wd.switch_to.frame('frame1')
# 如果没有id、name属性,可以根据其他属性查找
# wd.switch_to.frame(wd.find_element_by_css_selector('[src="sample1.html"]'))

elements = wd.find_elements_by_css_selector('.plant')
for element in elements:
    print(element.text)

# 返回上一级html
# wd.switch_to.parent_frame()

# 切换到主html 即最开始的html
wd.switch_to.default_content()
  • 多窗口切换
wd = webdriver.Chrome()
wd.get('http://tv.cctv.com')
wd.implicitly_wait(5)
# 找到节目单
# link = wd.find_element_by_css_selector('.nav li:nth-child(3) a')
link = wd.find_element_by_css_selector('.left a:nth-child(1)')
# 当前窗口
main_window = wd.current_window_handle
print(wd.title)

sleep(2)
link.click()
# 切换到新窗口
for handle in wd.window_handles:
    wd.switch_to.window(handle)
    if link.text in wd.title:
        break
# 当前窗口的title
print(wd.title)
sleep(2)
# 点击链接打开新的标签页,回到主窗口,跳转窗口前保存
wd.switch_to.window(main_window)
十一、截屏、验证码处理
  • 截屏
    driver.get_screenshot_as_file('./cctv.png')
# 由于测试时可能失败多次,产生多个截图,可以用时间戳命名
name = int(time.time())
driver.get_screenshot_as_file('./' + str(name) + '.png')
  • 验证码
    selenium没有提供处理验证码的方法
    (1)去掉验证码(测试环境下采用)
    (2)设置万能验证码(生产环境和测试环境下采用)
    (3)验证码识别技术(通过Python-tesseract来识别图片类型验证码,识别率很难达到100%)
    (4)记录cookie(通过记录仪cookie进行跳过登录)
十二、cookie

获取网站所有cookie
driver.get_cookies()
获取指定cookie(name对应的值)
driver.get_cookie('BIDUPSID')
添加cookie
driver.add_cookie({'name': 'BDUSS', 'value': BDUSS})

相关文章

  • 网络爬虫组合

    网络爬虫组合 selenium Web自动化测试工具,应用于Web自动化测试 可以运行在浏览器,根据指定命令操作浏...

  • robotframework+selenium2library如

    由于selenium2library进行web自动化测试,默认会使用webdriver启动浏览器打开web界面操作...

  • web自动化基础

    一、认识web自动化测试 1.什么是自动化测试 首先比较一下手动和自动: 手动操作如下: 自动操作如下: http...

  • Selenium浅析

    Selenium 设计的目的是为了自动化的操作浏览器,完成自动化 Web 测试任务。当然,Selenium 的能力...

  • web自动化--操作

    一、操作元素 清空数据driver.find_element_by_id('kw').clear() 输入数据dr...

  • 5、Selenium:文件操作

    一、前言 文件操作是 Web 端自动化中比较常用的一个操作,一般文件操作包含:上传、下载 WebDriver 仅仅...

  • Docker-Selenium在WebUI测试中的使用

    selenium简介 Selenium是一个WEB自动化测试工具支持跨浏览器的自动化测试支持跨操作系统的自动化测试...

  • Selenium学习002-元素选择之常规方法

    Selenium 选择、操作web元素01 Selenium 自动化主要就是: 选择界面元素依靠selenium库...

  • web自动化原理揭秘【乐搏TestPRO】

    做过两年自动化测试的小伙伴说Web自动化测试真的不难,无非就是一些浏览器操作,页面元素操作,常规的情况很容易处理,...

  • Python+Selenium+BeautifulSoup网页爬

    1.Selenium是什么?Web自动化测试框架,能模拟网页点击操作http://seleniumhq.org/ ...

网友评论

      本文标题:web自动化--操作

      本文链接:https://www.haomeiwen.com/subject/rlyvnhtx.html