Python自动化测试之Selenium详解

这篇具有很好参考价值的文章主要介绍了Python自动化测试之Selenium详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.安装

完成自动化测试,需要配置三个东西。

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

selenium:pip就可以了

chrome:浏览器下载一个谷歌浏览器就行

chrome-driver:下载地址http://chromedriver.storage.googleapis.com/index.html

这里需要对应到自己的浏览器版本下载。

从浏览器上下载到本地后,本机mac上自动保存至Download/目录下

但我们要把它转移到该去的地方

具体终端命令如下:

#目录到下载位置

cd Downloads/

#解压zip文件

unzip chromedriver_mac64.zip

#拿到解压后文件Unix Executable类型文件后,移动它该去的位置

mv chromedriver /usr/local/bin/

 
  1. ​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。

  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受

  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛

  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙

  5. 可以免费学习!划重点!开源的!!!

  6. qq群号:680748947【暗号:csdn11】

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

2.基础操作

下面就来了解一下 Selenium 的一些基础操作把。先写一点简单的小功能演示一下:

 
  1. from selenium import webdriver

  2. from selenium.webdriver.common.keys import Keys

  3. browser = webdriver.Chrome()

  4. browser.get('https://www.baidu.com')

  5. input = browser.find_element_by_id('kw')

  6. input.send_keys('杨幂')

  7. input.send_keys(Keys.ENTER)

  8. print(browser.current_url)

  9. print(browser.get_cookies())

  10. print(browser.page_source)

运行以上代码,可以看到自动弹出来一个 Chrome 浏览器,并且上面标示了: Chrome 正受到自动软件的控制 。然后打开了百度,在输入框中输入了 “杨幂” 进行搜索

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

2.1 声明浏览器对象

Selenium 支持非常多的浏览器,如:

 
  1. from selenium import webdriver

  2. # 声明浏览器对象,需对应的驱动程序方可使用

  3. browser = webdriver.android()

  4. browser = webdriver.blackberry()

  5. browser = webdriver.chrome()

  6. browser = webdriver.edge()

  7. browser = webdriver.firefox()

  8. browser = webdriver.ie()

  9. browser = webdriver.opera()

  10. browser = webdriver.phantomjs()

  11. browser = webdriver.safari()

可以看到有我熟悉的 IE 浏览器、 Edge 浏览器、 FireFox 浏览器、 Opera 浏览器等等。

2.2 访问网页

访问网页可以使用 get() 方法,参数传入我们想要访问的网站即可:

 
  1. from selenium import webdriver

  2. browser = webdriver.Chrome()

  3. browser.get('https://www.jd.com/')

  4. print(browser.page_source)

通过上面两行代码,我们可以看到自动打开了浏览器并访问的京东,在控制台打印了京东的源代码。

当然,如果想要程序自动关闭浏览器的话可以使用:

1

browser.close()

2.3 查找单个节点

我们获取到网页后,第一步肯定是要先查找到 DOM 节点啊,然后可以直接从 DOM 节点中获取数据。

不过有了 Selenium 以后,我们不仅可以查找到节点获取数据,还可以模拟用户操作,比如在搜索框输入某些内容,点击按钮等等操作,不过还是先看看怎么查找节点:

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

从上面这张图可以看到,我们想要获取输入框,可以通过 id 进行获取,那么我们接下来的代码要这么写:

 
  1. from selenium import webdriver

  2. browser = webdriver.Chrome()

  3. browser.get('https://www.jd.com/')

  4. input_key = browser.find_element_by_id('key')

  5. print(input_key)

结果如下:

<selenium.webdriver.remote.webelement.WebElement (session="86d1ae1419bee22099a168dfbf921a27", element="53047804-ad39-4dfd-b3fb-a149fb1c8ac8")>

可以看到,我们获得的元素类型是 WebElement 。

这里顺手列出所有的获得单个节点的方法:

 
  1. find_element_by_id

  2. find_element_by_name

  3. find_element_by_xpath

  4. find_element_by_link_text

  5. find_element_by_partial_link_text

  6. find_element_by_tag_name

  7. find_element_by_class_name

  8. find_element_by_css_selector

此外, selenium 还未我们提供了一个通用方法 find_element() ,它需要传入两个参数:查找方式 By 和值。实际上上面示例中的查找方式还可以这么写(效果完全一样哦~~~)

 
  1. from selenium import webdriver

  2. from selenium.webdriver.common.by import By

  3. browser = webdriver.Chrome()

  4. browser.get('https://www.jd.com/')

  5. input_key1 = browser.find_element(By.ID, 'key')

  6. print(input_key1)

2.4 查找多个节点

比如我们要查找左边的这种导航条的所有条目:

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

可以这么写

1

2

lis = browser.find_elements_by_css_selector('.cate_menu li')

print(lis)

结果如下:

 
  1. [<selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="8e0d1a8c-d5dc-4b1f-8250-7f0eca864ea7")>, <selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="15cd4dc9-42f4-4ed7-9258-9aa29073243c")>,

  2. ......]

 下面列出来所有的多节点选择的方法:

 
  1. find_elements_by_name

  2. find_elements_by_xpath

  3. find_elements_by_link_text

  4. find_elements_by_partial_link_text

  5. find_elements_by_tag_name

  6. find_elements_by_class_name

  7. find_elements_by_css_selector

同样,多节点选择也有一个 find_elements() 的方法,

3.等待

如今,大多数 Web 应用程序都在使用 AJAX 技术。当浏览器加载页面时,该页面中的元素可能会以不同的时间间隔加载。这使定位元素变得困难:如果 DOM 中尚不存在元素,则定位函数将引发 ElementNotVisibleException 异常。使用等待,我们可以解决此问题。等待在执行的动作之间提供了一定的松弛时间-主要是定位元素或对该元素进行的任何其他操作。

Selenium Webdriver 提供两种类型的等待-隐式和显式。显式等待使 WebDriver 等待特定条件发生,然后再继续执行。隐式等待使 WebDriver 在尝试查找元素时轮询DOM一定时间。

3.1 显式等待

我们可以使用 time.sleep() 来设定等待时间,完全没有问题,但是它需要将条件设置为要等待的确切时间段。如果我们不知道准确的渲染时间,我们就无法设定一个比较合适的值。

Selenium 为我们提供了 WebDriverWait 与 ExpectedCondition 来完成这件事情,看代码:

 
  1. from selenium import webdriver

  2. from selenium.webdriver.common.by import By

  3. from selenium.webdriver.support.ui import WebDriverWait

  4. from selenium.webdriver.support import expected_conditions as EC

  5. driver = webdriver.Chrome()

  6. driver.get("https://www.jd.com/")

  7. try:

  8. element = WebDriverWait(driver, 10).until(

  9. EC.presence_of_element_located((By.ID, "key"))

  10. )

  11. finally:

  12. driver.quit()

结果如下:

<selenium.webdriver.remote.webelement.WebElement (session="b1baacca997d18d7d54447127c844d15", element="a472369e-3196-4456-b43e-4e1b280bf5b9")>

上面我们使用了 WebDriverWait 来设置最长等待时间,这里我们选择获取 JD 首页的输入框,我们限定的等待时间为 10s ,如果它在 10s 内都无法返回结果,将会抛出 TimeoutException 。默认情况下, WebDriverWait 每 500 毫秒调用 ExpectedCondition ,直到成功返回。

3.2 隐式等待

隐式等待告诉 WebDriver 在尝试查找不立即可用的一个或多个元素时在一定时间内轮询 DOM 。默认设置为 0 。设置后,将在 WebDriver 对象的生存期内设置隐式等待。

 
  1. from selenium import webdriver

  2. driver = webdriver.Chrome()

  3. driver.implicitly_wait(10) # seconds

  4. driver.get("https://www.jd.com/")

  5. key = driver.find_element_by_id("key")

  6. print(key)

节点交互

Selenium 为我们提供了一些节点的交互动作,如输入文字时可以用 send_keys() 方法,清空文字时可以用 clear() 方法,点击按钮时可以用 click() 方法。

 
  1. from selenium import webdriver

  2. import time

  3. driver = webdriver.Chrome()

  4. driver.implicitly_wait(10)

  5. driver.get('https://www.taobao.com/')

  6. input = driver.find_element_by_id('q')

  7. input.send_keys('IPad')

  8. time.sleep(1)

  9. input.clear()

  10. input.send_keys('Surface Pro')

  11. button = driver.find_element_by_class_name('btn-search')

  12. button.click()

在上面这个示例中,我们先打开淘宝网,并且开启了隐式等待,先在搜索框中输入了 IPad ,在等待 1s 后删除,再输入了 Surface Pro ,然后点击了搜索按钮,先在淘宝搜索需要用户登录才能搜索,所以我们直接跳转到了登录页。

执行 JavaScript

对于某些 Selenium API 没有提供的操作,我们可以通过模拟运行 JavaScript 的方式来完成,用到的方法是 execute_script() ,比如我们在淘宝首页将滚动条滑到底部:

 
  1. from selenium import webdriver

  2. driver = webdriver.Chrome()

  3. driver.get('https://www.taobao.com/')

  4. driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

获取信息

前面我们介绍了如何拿到 DOM 节点,那么最重要的是我们要从 DOM 节点上来获取我们需要的信息。

因为我们获取的是 WebElement 类型,而 WebElement 也提供了相关的方法来提取节点信息。

 
  1. from selenium import webdriver

  2. from selenium.webdriver.chrome.options import Options

  3. # 实例化一个启动参数对象

  4. chrome_options = Options()

  5. # 设置浏览器窗口大小

  6. chrome_options.add_argument('--window-size=1366, 768')

  7. # 启动浏览器

  8. driver = webdriver.Chrome(chrome_options=chrome_options)

  9. url = 'https://www.geekdigging.com/'

  10. driver.get(url)

  11. title = driver.find_element_by_xpath('//*[@id="text-4"]/div/div/div[1]/div[2]/a')

  12. print(title)

  13. # 获取属性信息

  14. print(title.get_attribute('href'))

  15. # 获取文本信息

  16. print(title.text)

  17. # 获取位置

  18. print(title.location)

  19. # 获取大小

  20. print(title.size)

上面因为 Chrome 默认打开大小有点小,打开小编博客的时候小编选择的这个 DOM 节点正好看到,所以小编设置了一下 Chrome 浏览器打开时的大小。

具体信息的供大家参考:

  • parent:查找到此元素的WebDriver实例的内部引用。
  • rect:具有元素大小和位置的字典。
  • screenshot_as_base64:以 base64 编码字符串的形式获取当前元素的屏幕快照。
  • screenshot_as_png:以二进制数据获取当前元素的屏幕截图。最后这两个获取元素屏幕快照,在获取验证码的时候将验证码截取出来会很好用的。

前进和后退

我们使用浏览器最上面的地方有一个前进和后退按钮,Selenium 完成这两个动作使用了 back() 和 forward() 这两个方法。

 
  1. import time

  2. from selenium import webdriver

  3. browser = webdriver.Chrome()

  4. browser.get('https://www.jd.com/')

  5. browser.get('https://www.taobao.com/')

  6. browser.get('https://www.geekdigging.com/')

  7. browser.back()

  8. time.sleep(1)

  9. browser.forward()

Cookies

又到了一个重点内容, Cookies ,它是和服务端保持会话的一个重要元素。 Selenium 为我们提供了一些方法,让我们可以方便的对 Cookies 进行增删改查等操作。示例如下:

 
  1. from selenium import webdriver

  2. browser = webdriver.Chrome()

  3. browser.get('https://www.geekdigging.com/')

  4. # 获取 cookies

  5. print(browser.get_cookies())

  6. # 添加一个 cookie

  7. browser.add_cookie({'name': 'name', 'domain': 'www.geekdigging.com', 'value': 'geekdigging'})

  8. print(browser.get_cookies())

  9. # 删除所有 cookie

  10. browser.delete_all_cookies()

  11. print(browser.get_cookies())

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

 Python自动化测试之Selenium详解,软件测试,技术分享,python,selenium,开发语言

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。文章来源地址https://www.toymoban.com/news/detail-844024.html

到了这里,关于Python自动化测试之Selenium详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试 自动化测试selenium篇(一)

    目录 一、什么是自动化测试  单元测试  接口自动化  UI自动化 二、如何实施自动化测试  自动化测试需要了解的技能 三、selenium介绍 webdriver的工作原理:  四、Selenium+Java环境搭建                    验证环境是否搭建成功 创建java项目,添加pom文件中添加依赖 常见问题

    2024年02月07日
    浏览(57)
  • 软件测试 自动化测试selenium API

    1.1.1 CSS 选择器定位元素 CSS 选择器 就是一个语法 浏览器 (ctrl + f)可以进行选择 类选择器:.class值(.s_ipt) id 选择器:#id值(#kw) 父类选择器 子类选择器:父类选择器表达式 子类选择器表达式 标签选择器:标签名(form) 1.1.2 XPath 定位元素 XPath 是一种在XML 文档中定位元

    2024年04月28日
    浏览(37)
  • 软件测试(五)自动化 selenium

    自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器(代码)执行的过程。(简单而言其实就是降低重复性的工作(大部分是Python)) 自动化测试的具体实现,应该是包含下

    2024年02月08日
    浏览(51)
  • 软件测试/测试开发丨Selenium Web自动化测试基本操作

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26901 模拟功能测试中对浏览器的操作 get方法打开浏览器 refresh方法刷新页面 用back方法回退到上一个界面 maximize_window方法使窗口最大化 minimize_window方法使窗口最小化 标签: a 属性:href 类属性

    2024年02月10日
    浏览(42)
  • Python自动化测试利器selenium详解

    Selenium是一种常用的Web自动化测试工具,支持多种编程语言和多种浏览器,可以模拟用户的交互行为,自动化地执行测试用例和生成测试报告。Selenium基于浏览器驱动实现,结合多种定位元素的方法,可以实现各种复杂的Web应用程序的测试 自动化测试指软件测试的自动化,在

    2024年02月16日
    浏览(28)
  • Python + selenium 自动化测试框架详解

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2024年02月03日
    浏览(29)
  • Python自动化测试之Selenium详解

    1.安装 完成自动化测试,需要配置三个东西。 selenium :pip就可以了 chrome :浏览器下载一个谷歌浏览器就行 chrome-driver :下载地址http://chromedriver.storage.googleapis.com/index.html 这里需要对应到自己的浏览器版本下载。 从浏览器上下载到本地后,本机mac上自动保存至Download/目录下

    2024年03月28日
    浏览(33)
  • 软件测试/测试开发丨Selenium Web自动化测试 高级控件交互方法

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 使用场景 对应事件 复制粘贴 键盘事件 拖动元素到某个位置 鼠标事件 鼠标悬停 鼠标事件 滚动到某个元素 滚动事件 使用触控笔点击 触控笔事件(了解即可) https://www.selenium.dev/documentati

    2024年02月09日
    浏览(84)
  • 自动化测试工具Selenium的基本使用方法,软件测试基础

    browser.find_element(By.ID,‘kw’).send_keys(“美女”) browser.find_element_by_id(‘kw’).send_keys(‘性感’) 2.通过标签name属性进行定位 browser.find_element_by_name(“wd”).send_keys(“Linux”) browser.find_element(By.NAME,‘wd’).send_keys(“美女”) 3.通过标签名进行定位 browser.find_element_by_tag_name(“input”).

    2024年04月22日
    浏览(41)
  • 软件测试自动化Java篇【Selenium+Junit 5】

    为什么选择selenium作为我们的web自动化测试工具? 开源免费 支持多浏览器 支持多系统 支持多语言【Java,Python,C#,Rubby,JavaScript,Kolin】 selenium包提供了很多可供测试使用的API Chrome浏览器 Chrome驱动【驱动器版本要和浏览器版本对应越详细越好】 然后把驱动包放在安装jdk的

    2024年01月18日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包