Selenium探险家:驾驭Web自动化的秘籍与实战

news2024/9/24 19:23:13

Hi,我是阿佑,今天将带大伙们学会如何使用Selenium进行高效的网站测试,如何配置Selenium Grid实现分布式测试,以及如何预测和拥抱自动化测试的未来!

文章目录

  • 1. 引言
    • 2. 背景介绍
      • 2.1 Selenium概览
      • 2.2 Python与Selenium的结合
    • 3. Selenium基础操作
      • 3.1 WebDriver初探
      • 3.2 页面元素定位
      • 3.3 交互操作
    • 4. 高级功能与实践
      • 4.1 页面等待策略
      • 4.2 异常处理
      • 4.3 多窗口与标签页操作
      • 4.4 执行JavaScript
    • 5. Selenium WebDriver实战案例
      • 5.1 网站登录自动化
      • 5.2 网页表单自动化填写
      • 5.3 数据抓取与验证
    • 6. Selenium Grid与分布式测试
      • 6.1 Selenium Grid简介
      • 6.2 配置与使用Grid
    • 7. 结论
      • Selenium在自动化测试中的应用价值总结
      • 未来发展趋势预测
    • 参考文献
      • 官方文档
      • 推荐书籍
      • 在线课程
      • 社区与论坛支持
      • 开源项目与工具

1. 引言

在当今这个数字化飞速发展的时代,我们每个人都像是在互联网的海洋中航行的水手。而Web自动化测试,就是那艘能够带我们安全、高效地穿越波涛汹涌的海洋的船只。它不仅能够保证我们的网站和应用在各种环境下都能正常运行,还能让我们的测试工作从繁琐的重复劳动中解放出来,让我们有更多的时间去探索未知的领域。

好了,让我们来聊聊今天的主角——Selenium。Selenium,这个名字听起来就像是古希腊神话中的月神,它在自动化测试的世界里也扮演着守护者的角色。自从2004年诞生以来,Selenium就以其强大的功能和灵活性,成为了自动化测试领域的一颗璀璨明星。

Selenium不仅仅是一个工具,它更像是一位经验丰富的船长,带领着我们驶向成功的彼岸。它能够控制几乎所有的浏览器,无论是Chrome、Firefox还是Safari,都能在Selenium的指挥下,执行各种复杂的任务。

那么,Selenium和Python的结合,就像是船长找到了他最得力的助手。Python以其简洁的语法和强大的库支持,成为了Selenium的最佳拍档。使用Python来编写Selenium脚本,就像是用最优雅的语言来指挥一场精彩的交响乐。

接下来,我们将一起踏上这段旅程,从Selenium的基础知识开始,一步步探索它的高级功能,并通过实战案例来展示它的强大能力。在这段旅程中,你将学会如何使用Selenium来自动化测试你的网站,让它变得更加健壮和可靠。

但在这之前,让我们先来搭建起我们的船只——安装Selenium库并配置好环境。这就像是为即将起航的船只装上帆和舵,确保我们的旅程能够顺利进行。

准备好了吗?让我们扬帆起航,开始我们的Selenium之旅吧!
在这里插入图片描述

2. 背景介绍

2.1 Selenium概览

想象一下,你是一位探险家,站在历史的长河岸边,回望着那些勇敢的先驱们。Selenium,这位自动化测试的先驱,它的足迹可以追溯到2004年。那时候,它以一个简单的工具的身份诞生,目的是为了自动化浏览器测试。随着时间的流逝,Selenium不断进化,从一个简单的工具成长为一个强大的框架,它的故事就像是一部精彩的冒险小说。

Selenium的历史充满了变革和创新。它从最初的单一功能,发展到现在能够支持多种浏览器和平台,这一路上的演变,就像是探险家在未知领域中不断发现新大陆。而与其他自动化测试工具相比,Selenium就像是一把瑞士军刀,多功能且强大,无论是简单的页面测试还是复杂的多浏览器测试,它都能轻松应对。

2.2 Python与Selenium的结合

现在,让我们把镜头转向Python,这位Selenium的得力助手。Python以其简洁的语法和强大的库支持,成为了Selenium的最佳搭档。在自动化测试的世界里,Python就像是一把锋利的剑,而Selenium则是那把剑的剑鞘,两者结合,无坚不摧。

Python语言在自动化测试中的优势不言而喻。它简单易学,代码可读性强,这使得即使是编程新手也能快速上手。而对于那些经验丰富的开发者来说,Python的丰富库和框架,能够让他们更加高效地编写测试脚本。

安装Selenium库及环境配置的过程,就像是为即将起航的船只准备必要的物资。你只需要通过Python的包管理器pip,简单地输入一行命令pip install selenium,Selenium的宝藏就会呈现在你面前。接下来,根据你想要控制的浏览器,下载相应的WebDriver,你的Selenium之旅就可以正式起航了。

随着我们的船只逐渐准备就绪,我们即将驶向更广阔的海域。在下一章,我们将深入探索Selenium的基础操作,学习如何驾驭这艘船,让它在Web自动化测试的海洋中乘风破浪。准备好了吗?让我们继续我们的探险吧!

3. Selenium基础操作

3.1 WebDriver初探

想象一下,你手中有一把神奇的钥匙,可以打开任何浏览器的大门。这把钥匙就是WebDriver。它不仅仅是一个简单的驱动程序,更像是一个万能的遥控器,能够控制浏览器的一举一动。

启动浏览器实例的过程,就像是启动一辆赛车。你只需要一行简单的代码,比如:

from selenium import webdriver

# 创建一个Chrome浏览器实例
driver = webdriver.Chrome()

这行代码就像是按下启动按钮,Chrome浏览器就会像一辆赛车一样,轰鸣着启动起来。接下来,你可以用它来访问任何网站,就像驾驶赛车在赛道上飞驰。

3.2 页面元素定位

在浏览器的海洋中,每个网页都是一个岛屿,而页面元素就是岛屿上的宝藏。要找到这些宝藏,你需要一张藏宝图,这张图就是元素定位的方法。

  • ID定位:就像是使用GPS定位,直接找到宝藏的精确位置。
  • Name定位:如果你知道宝藏的名字,那么找到它就简单多了。
  • XPath定位:这是一种更复杂的定位方法,就像是根据地图上的坐标来寻找宝藏。
  • CSS Selector定位:这就像是根据宝藏的外观特征来寻找它。

例如,如果你想在页面上找到一个按钮并点击它,你可以使用XPath定位:

button = driver.find_element_by_xpath("//button[@id='submit']")
button.click()

这就像是你对赛车说:“嘿,看到那个按钮了吗?给我冲过去,按下它!”

3.3 交互操作

现在,我们已经找到了宝藏,接下来就是与宝藏互动的时候了。在Selenium中,你可以模拟点击、输入文本、选择下拉菜单等各种操作。

  • 模拟点击:就像是你用手指轻轻触碰宝藏,看看它是否会打开一个秘密通道。
  • 输入文本:这就像是在宝藏上刻下你的名字,让它记住你来过这里。
  • 选择下拉菜单:这就像是在宝藏箱中挑选你最想要的宝贝。

举个例子,如果你想在一个搜索框中输入文字并搜索:

search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium WebDriver")
search_box.submit()

这就像是你对赛车说:“嘿,带我去搜索‘Selenium WebDriver’这个宝藏!”

随着我们的探险逐渐深入,我们已经学会了如何驾驭Selenium这艘船,让它在Web自动化测试的海洋中航行。在下一章,我们将探索Selenium的高级功能,让我们的探险之旅更加精彩。准备好了吗?让我们继续前进,探索更多未知的宝藏吧!

4. 高级功能与实践

4.1 页面等待策略

在自动化测试的世界里,时间就是金钱,效率就是生命。但是,有时候我们的页面就像是一位害羞的姑娘,需要一点时间来准备她的美丽。这就是为什么我们需要页面等待策略。

  • 显式等待:这就像是你告诉Selenium:“嘿,伙计,给我看着点,等到这位姑娘准备好了再告诉我。”你可以设置一个等待时间,比如:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)  # 等待时间设置为10秒
element = wait.until(EC.visibility_of_element_located((By.ID, "myElement")))
  • 隐式等待:这更像是一种默契,你告诉Selenium:“在接下来的操作中,如果页面上的元素还没准备好,就耐心等等。”你可以设置一个全局的隐式等待时间:
driver.implicitly_wait(5)  # 设置隐式等待时间为5秒

4.2 异常处理

在自动化测试的旅途中,难免会遇到一些坑坑洼洼,这时候就需要我们有一套应对策略。

  • 常见异常类型:比如NoSuchElementException,当你试图找到一个不存在的元素时就会遇到它。
  • 自定义异常处理机制:这就像是你的背包里的工具,帮助你在遇到问题时快速解决。

处理异常的一个例子:

try:
    element = driver.find_element_by_id("nonexistent")
except NoSuchElementException:
    print("哎呀,这个元素不存在,我们换个地方找找吧!")

4.3 多窗口与标签页操作

在Web的世界里,多窗口和标签页就像是我们的分身术,让我们能够同时处理多个任务。

  • 切换窗口:当你打开一个新窗口时,Selenium会告诉你一个新的窗口句柄,你可以通过它来切换:
new_window = driver.execute_script("window.open('');")
driver.switch_to.window(new_window)
  • 切换标签页:当你打开一个新标签页时,Selenium同样会提供给你一个标签页的引用,你可以通过它来切换:
driver.execute_script("window.open('http://new-tab.com');")
driver.switch_to.window(driver.window_handles[1])  # 切换到新的标签页

4.4 执行JavaScript

在某些情况下,我们需要直接与页面的JavaScript进行对话,这时候就需要用到执行JavaScript的功能。

  • 调用JS代码:这就像是你直接对页面说:“嘿,页面,给我做这个。”
  • JS执行与页面交互:这可以让你更细致地控制页面的行为。

一个执行JavaScript的例子:

driver.execute_script("arguments[0].click();", element)

这就像是你对赛车说:“嘿,赛车,看到那个元素了吗?给我点一下它!”

随着我们一步步深入Selenium的高级功能,我们的探险之旅变得越来越有趣。在下一章,我们将通过实战案例来展示Selenium的强大能力,让我们的探险之旅更加精彩。准备好了吗?让我们继续前进,探索更多未知的宝藏吧!
在这里插入图片描述

5. Selenium WebDriver实战案例

5.1 网站登录自动化

想象一下,你是一位侦探,需要潜入一个网站来获取重要信息。但是,这个网站有一个警卫——登录表单。别担心,Selenium会帮你轻松搞定它。

首先,我们需要分析登录流程,就像侦探分析犯罪现场一样。登录通常包括输入用户名和密码,然后点击登录按钮。接下来,我们将编写登录脚本,就像侦探制定行动计划一样。

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开登录页面
driver.get("http://example.com/login")

# 输入用户名和密码
username = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")
username.send_keys("你的用户名")
password.send_keys("你的密码")

# 提交登录表单
login_button = driver.find_element_by_id("loginButton")
login_button.click()

# 等待页面跳转
driver.implicitly_wait(10)

5.2 网页表单自动化填写

现在,让我们来到一个在线购物网站,你看到了一款心仪的商品,但是填写表单的过程繁琐又耗时。别担心,Selenium会帮你自动化这个过程。

首先,我们需要识别表单中的元素,比如商品名称、数量、颜色等。然后,我们将编写脚本来自动填写这些信息。

# 假设我们已经打开了商品页面

# 选择商品
product = driver.find_element_by_css_selector("#productList .product")
product.click()

# 填写数量
quantity = driver.find_element_by_id("quantity")
quantity.clear()
quantity.send_keys("2")

# 选择颜色
color = driver.find_element_by_id("color")
color.send_keys("红色")

# 提交表单
submit_button = driver.find_element_by_id("submit")
submit_button.click()

5.3 数据抓取与验证

最后,假设你是一位质量控制专家,需要验证网站上的数据是否准确。Selenium可以帮助你抓取数据并进行验证。

比如,你需要验证网站上的价格是否与数据库中的价格一致。你可以使用Selenium来抓取网页上的价格,并与数据库中的价格进行比较。

# 假设我们已经打开了商品详情页面

# 抓取网页上的价格
price_on_page = driver.find_element_by_id("price").text

# 假设我们从数据库中获取的价格存储在变量database_price中
if price_on_page == database_price:
    print("价格验证通过!")
else:
    print("价格不一致,需要调查!")

通过这些实战案例,我们可以看到Selenium的强大之处。它不仅可以帮助我们自动化日常的Web操作,还可以在数据抓取和验证方面发挥重要作用。

在下一章,我们将探索Selenium Grid和分布式测试,这将使我们的自动化测试能力更上一层楼。准备好了吗?让我们继续前进,探索更多Selenium的奥秘吧!

6. Selenium Grid与分布式测试

6.1 Selenium Grid简介

想象一下,你是一位指挥官,站在指挥台上,面前是一排排的电脑屏幕,每个屏幕都显示着不同的浏览器和操作系统。这不是科幻电影里的场景,这是Selenium Grid带给你的超能力。

Selenium Grid就像是一个强大的网络,连接着分布在世界各地的机器。这些机器就像你的士兵,听从你的命令,执行各种测试任务。通过Grid,你可以实现跨浏览器和跨平台的自动化测试,就像是拥有了一支多才多艺的军队,能够应对各种复杂的情况。

6.2 配置与使用Grid

配置Selenium Grid的过程就像是建立你的军队基地。首先,你需要一个Hub,这是你的指挥中心,所有的消息和指令都从这里发出。

from selenium import webdriver

# 设置Hub的URL
hub_url = "http://your-hub-url:4444/wd/hub"

# 创建一个使用Grid的WebDriver实例
driver = webdriver.Remote(command_executor=hub_url, desired_capabilities={'browserName': 'chrome'})

接下来,你需要配置Node,这是你的士兵,它们将执行实际的测试任务。每个Node都需要注册到Hub上,这样Hub才能知道它们的存在。

# 假设你的Node运行在另一台机器上,运行以下命令来注册Node
java -jar selenium-server-standalone-3.x.x.jar -role node -hub http://your-hub-url:4444/grid/register -browser "browserName=chrome,maxInstances=5"

现在,你的军队已经准备就绪,你可以开始执行分布式测试了。这就像是指挥你的士兵去执行任务。

# 执行测试任务
driver.get("http://example.com")

# ... 进行各种测试操作 ...

# 测试完成后,关闭WebDriver实例
driver.quit()

在这个过程中,你的测试任务会在不同的机器上并行执行,大大提高了测试的效率。

通过Selenium Grid和分布式测试,我们可以让自动化测试变得更加强大和灵活。这就像是拥有了一支无敌的军队,无论面对多么复杂的测试任务,都能够轻松应对。

在下一章,我们将总结Selenium在自动化测试中的应用价值,并预测未来的发展趋势。准备好了吗?让我们继续前进,探索Selenium的更多可能吧!

7. 结论

Selenium在自动化测试中的应用价值总结

随着我们Selenium之旅的结束,我们站在了一个新的起点上,回望过去,我们不禁感慨万千。Selenium,这位自动化测试界的超级英雄,以其超凡的力量和智慧,帮助我们解决了一个又一个难题。

  • 效率提升:Selenium让我们的测试工作变得自动化,不再需要手动重复那些繁琐的操作,就像是拥有了一台永不停歇的机器,24小时不间断地为我们工作。
  • 跨浏览器兼容性:Selenium让我们能够轻松地在不同的浏览器和操作系统上进行测试,确保我们的网站和应用能够适应各种环境。
  • 节省成本:通过自动化测试,我们减少了人力成本和时间成本,将更多的资源投入到产品的创新和优化中。
  • 错误减少:自动化测试减少了人为错误的可能性,提高了测试的准确性和可靠性。

未来发展趋势预测

展望未来,Selenium这位超级英雄将会继续进化,变得更加强大和智能。

  • 云服务集成:随着云计算技术的不断发展,Selenium可能会更加紧密地与云服务集成,让我们能够更加方便地利用云资源进行测试。
  • 人工智能结合:Selenium可能会与人工智能技术结合,实现更加智能的测试策略和自动化流程。
  • 移动设备测试:随着移动设备的普及,Selenium在移动设备测试方面的应用将会得到进一步的扩展和优化。
  • 社区发展:Selenium的社区将会继续壮大,更多的开发者和用户将会参与到Selenium的开发和应用中,共同推动其发展。

随着Selenium的不断发展,我们有理由相信,它将会成为自动化测试领域的一面旗帜,引领我们走向更加高效、智能的未来。

在这段旅程中,我们不仅学会了如何使用Selenium,更重要的是,我们学会了如何思考和解决问题。这将是我们在自动化测试领域不断前进的宝贵财富。

最后,让我们以一颗感恩的心,感谢Selenium这位超级英雄,感谢它为我们的自动化测试工作带来的便利和价值。同时,也感谢每一位在这段旅程中陪伴我们的伙伴,是你们的陪伴让这段旅程变得更加精彩。

准备好了吗?让我们携手Selenium,继续在自动化测试的道路上,勇往直前,探索更多的可能!
在这里插入图片描述

我是阿佑,一个专注于把晦涩的技术讲有趣的中二青年~

参考文献

官方文档

  • Selenium官方文档:这是学习Selenium最直接的资源,详细地介绍了Selenium的各个方面。
    • 链接:Selenium Official Documentation

推荐书籍

  • 《Selenium WebDriver 3 实战宝典》:这本书深入浅出地介绍了Selenium WebDriver 3的使用方法,适合初学者和有经验的开发者。
    • 作者:Luke Leberfinger
    • 出版社:人民邮电出版社
  • 《自动化测试最佳实践:测试人员和敏捷团队的测试自动化指南》:这本书不仅介绍了Selenium,还涵盖了自动化测试的最佳实践。
    • 作者:Doe Rumbaugh
    • 出版社:清华大学出版社

在线课程

  • Udemy上的Selenium课程:Udemy提供了多个关于Selenium的课程,适合不同水平的学习者。
    • 链接:Selenium Courses on Udemy
  • Coursera上的Web自动化测试课程:Coursera上的课程通常由大学教授讲授,内容权威且系统。
    • 链接:Web Automation on Coursera

社区与论坛支持

  • Stack Overflow:一个非常活跃的技术问答社区,你可以在这里找到许多关于Selenium的问题和答案。
    • 链接:Stack Overflow
  • Selenium官方论坛:官方论坛是获取Selenium最新动态和与其他用户交流的好地方。
    • 链接:Selenium Official Forum

开源项目与工具

  • Selenium GitHub仓库:在这里,你可以找到Selenium的源代码,提交bug,或者贡献代码。
    • 链接:Selenium on GitHub
  • WebDriverManager:一个用于管理WebDriver的工具,可以简化WebDriver的下载和管理过程。
    • 链接:WebDriverManager

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题--268. 丢失的数字【简单】

题目描述🍗 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以…

YOLOv5 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…

广义线性chirplet变换【附MATLAB代码】

文章来源:微信公众号:EW Frontier 摘要 时频分析方法是一种刻画信号时变特征的有效工具,在相当长的一段时间内受到了广泛的关注。随着TF算法的发展,许多先进的方法被提出,可以提供更精确的TF结果。但是,不…

第一届 长城杯 总决赛wp

第一届 长城杯 总决赛 - Ahisec 第一阶段 Zip_guessinteger 第一层bkcrack攻击部分明文,注意偏移 ​ ┌──(root㉿Ten)-[~/tools/Misc/bkcrack] └─# ./bkcrack -C zip_guessinteger.zip -c breakthroughentry.txtflag.txt.zip -p 1.txt -o 30 bkcrack 1.6.1 …

Lora理解

Parameter-Efficient Fine-Tuning (PEFT) :节约开销的做法,fine-tune少量参数,而不是整个模型; Low-Rank Adaptation (LoRA) :是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。

面了字节大模型算法岗,太难了。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

音视频开发9 FFmpeg 解复用框架--如何将一个影音文件(mp4文件/wav文件) 最终播放起来

一,播放器框架 二 常用音视频术语 容器/文件(Conainer/File): 即特定格式的多媒体文件, 比如mp4、flv、mkv等。 媒体流(Stream): 表示时间轴上的一段连续数据&#xff0…

基于maxkey接入jeecgboot并实现账户同步

1. 注册应用 1.1 在统一认证中心注册第三方应用 1.1.1 填写应用名和登录地址 1.1.2 填写认证地址授权方式和作用域 1.1.3 选择权限范围并提交 1.2 配置访问权限 1.2.1 指定用户组 1.1.2 选择注册的应用 1.1.3 在单点登录认证页面查看添加的应用 1.3 同步一个第三方应用的账号…

sqlserver的查询(三)

目录 10. group by(分组) 11. having(对分组后的信息过滤) 可能从这里开始,执行顺序越来越显得重要了!!! 10. group by(分组) 这个查询相比前面会有一些困难; 格式:group by 字段的集合; 功…

.NET调用阿里云人脸识别1:1简易流程保姆级教学

需要注意的是,以下内容仅限基础调用 人脸比对1:1 功能说明 该功能是两张照片对比,比对两张照片是不是同一个人,至于应用到什么场景,可以参考阿里云的官方文档,我这边以大学生项目来说的话,比如员工打卡&a…

实现销售与客流双增长!看看社区零售“排队王”如何成为顶流?

5月18日至5月26日,北京华联BHGMall燃情推出了一年一度的2024 Need(你的)BHGDay,接棒“五一”热潮,献礼“520”,通过韩式俯拍机、人生四宫格拍摄大赛、真合拍星派对、超级品牌日等丰富多彩的线上线下活动&am…

react实现动态增减表单项

在做项目的时候,甲方给的信息有限,网页的备案信息写成固定的,如下图所示 之后验收的时候,甲方要求把这个备案信息写成动态的,可以自增减,就去react组件库看看有没有具体的实现,果真有&#xff…

STM32_HAL__TIM_输出比较

概述 STM32的输出比较功能通常是指在微控制器的PWM(脉冲宽度调制)生成能力中的一个方面。STM32微控制器拥有一个或多个定时器/计数器,这些定时器/计数器可以用来生成PWM信号。PWM信号是一种重要的控制信号,广泛应用于电机控制、亮…

1分钟快速掌握JSON格式

文章目录 先说理论代码举例对象型数组型总结 先说理论 下面是JSON的几种简单数据类型: 数据类型描述数字型JavaScript中的双进度浮点类型,通常根据具体情况定义,这里是没有特殊的整形的。字符串型带双引号的Unicode,带反斜杠转义布尔型true…

探索python循环逻辑的魅力:从无限到有限

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:循环逻辑的初步认识 二、无限循环:持续运转的引擎 三、有…

等保服务是一次性服务吗?为什么?怎么理解?

我国等保政策已经严格落地执行,但还有不少企业对于等保服务不是很了解。例如有人问,等保服务是一次性服务吗?为什么?怎么理解?今天我们就来简单回答一下,仅供参考哈! 等保服务是一次性服务吗&…

前端Vue自定义顶部搜索框:实现热门搜索与历史搜索功能

前端Vue自定义顶部搜索框:实现热门搜索与历史搜索功能 摘要: 随着前端开发复杂性的增加,组件化开发成为了提高效率和降低维护成本的有效手段。本文介绍了一个基于Vue的前端自定义顶部搜索框组件,该组件不仅具备基本的搜索功能&am…

PLC无线通讯模块在触摸屏与台达PLC之间的应用教程

本方案可以作为信捷触摸屏与台达PLC之间在台达专用协议下将有线通讯改为无线通讯的应用实例。此方案中信捷TG765触摸屏作为主站,台达DVP-32EH PLC作为从站,采用西安达泰电子日系PLC无线通讯终端——DTD435MA-V384,作为实现无线通讯的硬件设备…

十分钟精通MinIO:minio的原理、部署、操作

一、认识MinIO Minio是一个简单易用的云存储服务,就像是一个放在网络上的大文件柜。想象一下,你有一间放满了各种文件的房间,有时候你需要把这些文件分享给朋友或者在不同地方访问它们。Minio就是帮你做到这一点的工具,它让你可以…

力扣:236.二叉树的最近公共祖先(C++)

文章目录 1. 题目描述2. 题目解析2.1 思路一2.1 思路二 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 题目来源: 力扣…二叉树的最近公共祖先 1. 题目描述 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表…