selenium自动化测试实战基于python,python+selenium自动化测试框架实例

  selenium自动化测试实战基于python,python+selenium自动化测试框架实例

  本文主要详细介绍了python自动化测试的Selenium。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  00-1010 1.安装2。基本操作2.1声明浏览器对象2.2访问网页2.3查找单个节点2.4查找多个节点3。等待3.1显式等待3.2隐式等待汇总

  

目录

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

  硒:pip就行。

  Chrome:浏览器只需下载一个谷歌浏览器。

  Chrome驱动程序:下载地址http://chromedriver.storage.googleapis.com/index.html

  这里需要根据自己的浏览器版本来下载。你可以参考这篇文章

  https://www.jb51.net/article/240643.htm

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

  但是我们必须把它移到它该去的地方。

  具体终端命令如下:

  #下载位置的目录

  cd下载/

  #解压缩zip文件

  解压缩chromedriver_mac64.zip

  #在你得到解压文件Unix可执行类型文件后,移动到它应该去的地方。

  mv chromedriver /usr/local/bin/

  

1.安装

  我们先来看看硒的一些基本操作。首先,编写一个简单的函数来演示:

  从selenium导入web驱动程序

  从selenium.webdriver.common.keys导入密钥

  浏览器=webdriver。铬合金()

  browser . get( https://www . Baidu.com )

  input=browser . find _ element _ by _ id( kw )

  Input.send_keys(杨幂)

  input.send_keys(键。回车)

  打印(browser.current_url)

  print(browser . get _ cookie())

  打印(浏览器.页面_源)

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

  

2.基础操作

  Selenium支持许多浏览器,例如:

  从selenium导入web驱动程序

  #声明浏览器对象,需要相应的驱动程序才能使用。

  browser=webdriver.android()

  browser=webdriver.blackberry()

  browser=webdriver.chrome()

  browser=webdriver.edge()

  browser=webdriver.firefox()

  browser=webdriver.ie()

  browser=webdriver.opera()

  browser=webdriver.phantomjs()

  browser=webdriver.safari()

  你可以看到我对IE浏览器,Edge浏览器,FireFox浏览器,Opera浏览器等等都比较熟悉。

  

2.1 声明浏览器对象

  你可以用get()方法访问一个网页,参数可以传入我们要访问的网站:

  from selenium import webdriver

  browser = webdriver.Chrome()

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

  print(browser.page_source)

  

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

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

  

browser.close()

  

  

  

2.3 查找单个节点

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

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

  

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

  

from selenium import webdriver

  browser = webdriver.Chrome()

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

  input_key = browser.find_element_by_id(key)

  print(input_key)

  

  结果如下:

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

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

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

  

find_element_by_id

  find_element_by_name

  find_element_by_xpath

  find_element_by_link_text

  find_element_by_partial_link_text

  find_element_by_tag_name

  find_element_by_class_name

  find_element_by_css_selector

  

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

  

from selenium import webdriver

  from selenium.webdriver.common.by import By

  browser = webdriver.Chrome()

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

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

  print(input_key1)

  

  

  

2.4 查找多个节点

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

  

  可以这么写

  

lis = browser.find_elements_by_css_selector(.cate_menu li)

  print(lis)

  

  结果如下:

  

[<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")>,
......]

  

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

  

find_elements_by_name

  find_elements_by_xpath

  find_elements_by_link_text

  find_elements_by_partial_link_text

  find_elements_by_tag_name

  find_elements_by_class_name

  find_elements_by_css_selector

  

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

  

  

3.等待

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

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

  

  

3.1 显式等待

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

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

  

from selenium import webdriver

  from selenium.webdriver.common.by import By

  from selenium.webdriver.support.ui import WebDriverWait

  from selenium.webdriver.support import expected_conditions as EC

  driver = webdriver.Chrome()

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

  try:

   element = WebDriverWait(driver, 10).until(

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

   )

  finally:

   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 对象的生存期内设置隐式等待。

  

from selenium import webdriver

  driver = webdriver.Chrome()

  driver.implicitly_wait(10) # seconds

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

  key = driver.find_element_by_id("key")

  print(key)

  

  节点交互

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

  

from selenium import webdriver

  import time

  driver = webdriver.Chrome()

  driver.implicitly_wait(10)

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

  input = driver.find_element_by_id(q)

  input.send_keys(IPad)

  time.sleep(1)

  input.clear()

  input.send_keys(Surface Pro)

  button = driver.find_element_by_class_name(btn-search)

  button.click()

  

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

  执行 JavaScript

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

  

from selenium import webdriver

  driver = webdriver.Chrome()

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

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

  

  获取信息

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

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

  

from selenium import webdriver

  from selenium.webdriver.chrome.options import Options

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

  chrome_options = Options()

  # 设置浏览器窗口大小

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

  # 启动浏览器

  driver = webdriver.Chrome(chrome_options=chrome_options)

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

  driver.get(url)

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

  print(title)

  # 获取属性信息

  print(title.get_attribute(href))

  # 获取文本信息

  print(title.text)

  # 获取位置

  print(title.location)

  # 获取大小

  print(title.size)

  

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

  具体信息的供大家参考:

  

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

  前进和后退

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

  

import time

  from selenium import webdriver

  browser = webdriver.Chrome()

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

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

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

  browser.back()

  time.sleep(1)

  browser.forward()

  

  Cookies

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

  

from selenium import webdriver

  browser = webdriver.Chrome()

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

  # 获取 cookies

  print(browser.get_cookies())

  # 添加一个 cookie

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

  print(browser.get_cookies())

  # 删除所有 cookie

  browser.delete_all_cookies()

  print(browser.get_cookies())

  

  

  

总结

  本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行IT软件开发工作室的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • android自动化测试框架有哪些,ios手机自动化测试工具,Android和iOS 测试五个最好的开源自动化工具
  • ,,如何使用IOS自动化测试工具UIAutomation
  • android自动化测试框架有哪些,ios手机自动化测试工具
  • ,,Python自动化测试框架pytest的详解安装与运行
  • ,,python自动化测试之DDT数据驱动的实现代码
  • selenium+java自动化测试框架,selenium自动化测试pdf
  • java自动化测试框架,java 自动化测试工具
  • 接口自动化测试面试问题,关于接口测试面试题
  • 自动化测试工具可以用在哪种测试过程中,测试自动化工具有哪些
  • airtest和appium自动化测试,airtest全自动脚本
  • 测试自动化面试问题及答案,自动化测试面试题及答案大全(3)
  • 自动化测试框架是什么,什么叫自动化测试框架
  • python+selenium自动化测试框架搭建,selenium自动化测试环境搭建
  • 接口测试与接口自动化测试,接口自动化测试项目实战
  • appium自动化测试环境搭建,python appium自动化测试框架
  • 留言与评论(共有 条评论)
       
    验证码: