博客
关于我
用python操作浏览器的三种方式,详细介绍并附代码
阅读量:143 次
发布时间:2019-02-27

本文共 3933 字,大约阅读时间需要 13 分钟。

Selenium Python 测试自动化技巧

一、浏览器操作方法

1. 使用 Selenium 导入浏览器驱动

Selenium 是一个强大的自动化测试框架,可以通过调用 WebDriver 模块控制浏览器操作。以下是创建 Chrome 浏览器实例并打开指定页面的示例代码:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(5) # 等待页面元素加载完成
driver.get("http://www.baidu.com") # 打开百度首页

2. 使用 Python 标准库 webbrowser

如果需要简单地控制浏览器,可以使用 Python 的 webbrowser 标准库。以下是打开 Internet Explorer 浏览器的示例代码:

import webbrowser
webbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe") # 打开 IE 浏览器

3. 使用 Splinter 模块

Splinter 是一个基于 Selenium 的轻量级模块,适合快速实现简单的自动化操作。安装 Splinter 以及其依赖项后,可以通过以下代码实现浏览器操作:

from splinter import Browser
browser = Browser()
browser.visit("http://www.126.com") # 打开 126 邮箱首页
time.sleep(5) # 等待页面加载完成
# 模拟登录操作
browser.find_by_id('idInput').fill('xxxxxx') # 输入账号
browser.find_by_id('pwdInput').fill('xxxxx') # 输入密码
browser.find_by_id('loginBtn').click() # 点击登录按钮

二、Selenium 安装与使用

1. 安装依赖项

Selenium 需要依赖 Cython、lxml 和 Selenium。可以通过以下链接下载安装:

  • Cython: 下载链接
  • Lxml: 下载链接
  • Selenium: 下载链接
  • 2. 使用 WebDriver

    Selenium 提供了多种浏览器驱动,包括 Chrome、Firefox 和 IE。创建驱动实例并打开页面的代码示例:

    from selenium.webdriver import Chrome, Firefox, InternetExplorer
    driver = Chrome() # 创建 Chrome 浏览器实例
    driver.get("http://www.baidu.com") # 打开百度首页

    3. 常用操作方法

    • driver.get(url):打开指定网页。
    • driver.find_element_by_id("id"):根据元素 ID 定位元素。
    • driver.find_element_by_name("name"):根据元素名称定位元素。
    • driver.find_element_by_class_name("class"):根据类名定位元素。
    • driver.find_element_by_tag_name("tag"):根据标签名称定位元素。
    • driver.find_element_by_link_text("text"):根据链接文本定位元素。
    • driver.find_element_by_xpath("xpath表达式"):根据 XPath 表达式定位元素。

    三、页面元素定位

    1. 常见定位方式

    • ID 定位find_element_by_id("id")
    • 名称定位find_element_by_name("name")
    • 类名定位find_element_by_class_name("class")
    • 标签名定位find_element_by_tag_name("tag")
    • 链接文本定位find_element_by_link_text("text")
    • XPath 定位find_element_by_xpath("//input[@id='kw']")
    • CSS 定位find_element_by_css_selector("#kw")

    2. 复杂情况处理

    如果元素定位困难,可以通过组合多个属性或 XPath 表达式来精准定位。例如:

    # 定位类名为 "s_ipt" 且 ID 为 "kw" 的输入框
    input_search = driver.find_element_by_css_selector(".s_ipt[id='kw']")

    四、常见案例

    1. 登录 126 邮箱

    以下是模拟登录 126 邮箱的示例代码:

    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("http://www.126.com")
    time.sleep(3)
    # 定位并填写账号和密码
    username = driver.find_element_by_id('idInput')
    username.clear()
    username.send_keys('xxxxxx')
    password = driver.find_element_by_id('pwdInput')
    password.clear()
    password.send_keys('xxxxx')
    login_btn = driver.find_element_by_id('loginBtn')
    login_btn.click()
    time.sleep(8)
    # 退出登录
    driver.quit()

    2. 发送邮件

    以下是模拟发送邮件的示例代码:

    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("http://www.126.com/mail")
    time.sleep(3)
    # 定位发件箱并点击
    email_component = driver.find_element_by_xpath("//span[contains(text(), '写 信')]")
    email_component.click()
    time.sleep(3)
    # 定位收件人地址栏并填写
    receiver = driver.find_element_by_class_name('nui-editableAddr-ipt')
    receiver.send_keys('xxx@163.com')
    # 定位主题输入栏并填写
    subject = driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']")
    subject.send_keys('自动化测试邮件')
    # 定位正文输入栏并填写
    body = driver.find_element_by_class_name('nui-scroll')
    body.send_keys('这是第一封自动化测试邮件')
    # 点击发送按钮
    send_btn = driver.find_element_by_class_name('nui-btn-text')
    send_btn.click()
    time.sleep(3)
    # 确认邮件发送成功
    assert '发送成功' in driver.page_source
    driver.quit()

    五、常见问题与解决方案

    1. 动态 ID 定位不到元素

    如果元素 ID 是动态变化的,可以通过 XPath 或 CSS 定位。

    # 例如,动态 ID 的元素可以通过以下方式定位:
    input_element = driver.find_element_by_xpath("//input[@id='dynamic_id']")

    2. 元素不可见

    如果元素不可见,可以设置显性等待或检查元素是否可见。

    # 设置显性等待
    driver.implicitly_wait(10)
    # 检查元素是否可见
    if not element.is_displayed():
    raise NoSuchElementException("元素未显示")

    3. 处理 iframe

    如果操作需要访问 iframe 内部的元素,需要先切换到 iframe。

    # 定位 iframe 并切换
    iframe = driver.find_element_by_class_name('APP-editor-iframe')
    driver.switch_to_frame(iframe)
    # 操作 iframe 内部的元素
    username = iframe.find_element_by_name('userName')
    username.send_keys('登录名')

    结论

    通过以上方法,可以轻松实现多种浏览器操作和页面元素控制。在实际使用中,根据具体需求选择合适的定位方式和浏览器驱动,确保测试脚本高效且可靠。

    转载地址:http://mfnb.baihongyu.com/

    你可能感兴趣的文章
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>