开源应用架构之​Selenium WebDriver(中)

Selenium基础 — Selenium自动化测试框架介绍 Selenium是一个用于Web应用程序测试的工具。只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。Selenium测试套件直接运行在浏览器中,就像真正的用户在操作浏览器一样。Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。Selenium工具的主要功能包括:测试程序与浏览器的兼容性,测试你的应用程序是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能,创建回归测试检验软件功能和用户需求。 阅读详情

Selenium团队最近发布了Selenium 2(又名Selenium WebDriver)​。主要新功能是集成了WebDriver​——曾经是Selenium 1(又名Selenium RC)的竞争对手。Selenium RC在浏览器中运行JavaScript应用,而WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器:

WebDriver针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还利用操作系统级的调用模拟用户输入。WebDriver支持Firefox (FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver) 和Chrome (ChromeDriver)。对Safari的支持由于技术限制在本版本中未包含,但是可以使用SeleneseCommandExecutor模拟。它还支持Android (AndroidDriver)和iPhone (IPhoneDriver) 的移动应用测试。它还包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver。WebDriver API可以通过Python、Ruby、Java和C#访问,支持开发人员使用他们偏爱的编程语言来创建测试。

WebDriver的创建者​Simon Stewart早在2009年八月的一份邮件中解释了项目合并的原因。

为何把两个项目合并?部分原因是WebDriver解决了Selenium存在的缺点(比如,能够绕过JS沙箱。我们有出色的API),部分原因是 Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器),部分原因是因为Selenium的主要贡献者和我都觉得合并项目是为用户 提供最优秀框架的最佳途径。

在两个项目合并中出现了哪些架构方面的问题?学到了哪些经验和教训?​Simon Stewart在《开源应用架构》中做了详细的描述,本文是Selenium WebDriver架构系列文章的第二篇,对复杂性设计的优劣做了深入实际的分析。

处理复杂性

软件是模块构造起来的。这些模块很复杂​,作为API的设计人员,我们可以选择如何处理这种复杂性。极端情况下,​我们可能会传播这种复杂性,这意味着​API的每一位用户都需要牵涉其中。另一个​极端情况是承担尽可能多的复杂性并将其隔离在某个地方。这个地方对于许多想一探究竟的API用户来说​黑暗而恐怖。折中方案则是API的用户,如果无须深入了解实现​细节,那么只需面对当前所遇到的复杂性​即可。​

WebDriver的开发人员更倾向于发现并在少数地方隔离这些复杂性,而不是传播它。这么做的原因之一是为了用户。看看我们的bug列表就​会知道,​他们特别善于发现问题和缺陷,但是因为许多用户不是开发人员,复杂的API不会受欢迎。我们试图让API正确地引导大家。例如,​考虑下面来自早期Selenium API的方法,每一个都用于设置输入元素的值:​

  • type
  • typeKeys
  • typeKeysNative
  • keydown
  • keypress
  • keyup
  • keydownNative
  • keypressNative
  • keyupNative
  • attachFile

下面是WebDriver API中的等价方法:​

  • sendKeys

如前所述,这凸显了RC和WebDriver之间的主要思想差异——WebDriver在努力模拟用户,而RC在较低层次提供的API​让用户难以或者无法使用。typeKeys和typeKeysNative之间的​区别在于前者总是使用合成事件(synthetic event)​,而后者则尝试利用AWT Robot输入键值。​令人失望的是,AWT Robot发送按键事件给具有焦点的任意窗口,也就是说可能不是浏览器。相比之下,WebDriver的原生事件,直接把事件发送给窗口处理函数,避免了浏览器窗口必须具有焦点的要求。​

WebDriver设计​

团队将WebDriver的API定位为“基于对象的”。接口被明确定义并努力坚持只包含一个角色或者责任,而不是将每一个可能的HTML标记模块化为单独的类,我们只有一个WebElement接口。​通过这种方式,开发人员使用支持自动补全的IDE即可被提示下一步工作。其结果类似于下面的代码片段(Java语言):

WebDriver driver = new FirefoxDriver();
driver.<user hits space>

此时,包含13个方法的短列表显示出来,用户选择其中一个: 

driver.findElement(<user hits space>)

大多数IDE现在显示预期参数的类型提示,在这个例子中是“By”。By包含许多预定义的静态工厂方法。我们的用户可以快速地完成刚才的代码:

driver.findElement(By.id("some_id"));

基于角色的接口 

考虑一下简化的Shop类。每天,它需要进货,并与Stockist合作发布新的货单。每月,它需要付工资和税。为了描述清楚,我们假设它通过使用Accountant完成这些事情。一种建模结果如下所示: 

public interface Shop {
     void addStock(StockItem item, int quantity);
     Money getSalesTotal(Date startDate, Date endDate);
}

我们有两种选择来定义Shop、Accountant和Stockist之间的接口的边界。图1显示了一种理论上的选择。

这意味着Accountant和Stockist将把Shop作为各自方法的参数。缺点是,Accountant不可能真的想要处理货架,而让Stockist了解Shop添加的大量价签也不合适。因此,更好的一种思路如图2所示。

我们将需要两个Shop必须实现的接口,但是这些接口清晰的定义了Shop为Accountant和Stockist承担的角色。它们都是介于角色的接口:

public interface HasBalance {
     Money getSalesTotal(Date startDate, Date endDate);
}

public interface Stockable {
    void addStock(StockItem item, int quantity);
}

public interface Shop extends HasBalance, Stockable {
}

我发现UnsupportedOperationExceptions等让人非常不适,但是我们需要某些东西以支持对部分用户暴漏部分功能而不会影响API的其他部分。为此,WebDriver广泛使用了基于角色的接口。例如,有一个JavascriptExecutor接口提供了在当前页面环境中执行任意Javascript语句块的功能。WebDriver实例对该接口的成功映射可以提示你利用该方法完成自己的工作。

图1:Accountant 和Stockist依赖Shop

图2:Shop实现了HasBalance和Stockable

处理组合爆炸​

考虑到WebDriver​支持广泛的浏览器和语言,我们首先想到稍有不慎,就会面临维护成本的大量攀升。​假设X种浏览器和Y种语言​,我们很容易就会掉进X×Y种实现中。

减少WebDriver支持的编程语言种类是降低成本的途径之一,但是我们基于两种原因不想这样做。首先,从一种语言切换到另一种时人们会承受认知负荷,因此对用户来说如果测试框架(WebDriver)能够允许他们采用在日常开发中使用的编程语言来编写测试,那么这是巨大的优势。其次,在单一项目中混合多种语言可能会让团队感觉不舒服,而且公司的编码规范和需求通常要求技术单一纯正性(虽然我们愉快的看到,第二点理由随着时间推移越来越淡化),因此,减少支持语言的种类不是可选项。

减少支持浏览器的数量也不是一种选择——想想看,当我们决定在WebDriver中淘汰对Firefox 2的支持时,就遇到了强烈的抗议,而事实上当我们作出这个决定时,Firefox 2只占了浏览器市场份额不到1%。

我们唯一的选择是努力使所有浏览器对语言绑定的外观相同:它们应该提供统一的接口,可以轻松地通过各种语言解决。更重要的是,我们希望语言绑定本身尽可能的易于编写,这意味着需要尽可能的使它们保持简洁。我们在底层driver中放入了尽可能多的逻辑来支持这种设计:我们无法放入dirver的每一块功能都意味着需要通过我们支持的每一种语言实现,而这代表了一大块工作量。

这里举一个例子,IE driver成功地把定位和启动IE的功能放入了主要驱动逻辑中。虽然这会导致在dirver中编写惊人数量的代码,但是用于创建新实例的语言绑定只需对driver的单一方法调用。相比之下,Firefox无法做这种改动。在Java语言中,这意味着我们有三个主要的类来处理配置和启动Firefox,大约1300行代码。这些类在每一种支持FirefoxDriver的语言绑定中都是重复的,无须依赖Java服务器。这会有大量的多余代码需要维护。

WebDriver设计中的缺陷

通过这种方式发布功能的缺陷在于除非有人知道某个特定的接口存在,否则他们可能不会意识到WebDriver支持这种功能,在API的可发掘性上存在缺憾。当然在WebDriver刚发布的时候,我们会投入大量时间来指导人们找到合适的接口。现在我们已经花费大量精力来编写文档,随着API获得广泛应用,用户会越来越容易的找到所需的文档。

我认为API有一个地方设计的非常差。我们有一个接口称为RenderedWebElement,其中包含一些奇怪的方法来查询元素的渲染状态(isDisplayed、getSize和getLocation),执行操作(hover和拖拽方法),而且还提供方法获取特定CSS属性的值。创建它的原因是HtmlUnit驱动没有提供所需的信息,但是Firefox和IE驱动提供了。它最初只有一部分方法,后来我经过苦苦思索又增加了其他方法。这个接口目前众所周知,艰难的选择在于是否保持API的丑陋之处,或者删除它。我更倾向于不要遭遇“破窗”理论,因此,在Selenium 2.0发布之前修补它非常重要。结果就是,在你读到这些文字时,RenderedWebElement可能已经消失了。

从实现者的观点来看,紧密绑定浏览器也是一种设计缺陷,虽然无法避免。支持新浏览器时需要投入巨大的努力,经常需要数次尝试才能找到正确方法。具体的例子就是,Chrome驱动经过了四次完全重写,IE驱动也有三种关键重写。紧密绑定浏览器的优点在于它提供了更多控制权。

布局和Javascript

浏览器自动化工具基本上由三部分构成:

  • 与DOM交互的方法
  • 执行Javascript的机制
  • 一些模拟用户输入的办法

本节重点介绍第一部分:提供与DOM交互的机制。浏览器的办法是通过Javascript,所以看起来与DOM交互的理想语言也是它。虽然这种选择似乎显而易见,但是在考虑Javascript时需要平衡一些有趣的挑战和需求。

像多数大型项目一样,Selenium使用了分层的库结构。底层是Google的Closure库,提供原语和模块化机制来协助源文件保持精简。在此之上,有一个实用工具库,提供的函数包括简单的任务,如获取某个属性值、判断某个元素是否对用户可见,还包括更加复杂的操作,如通过合成事件模拟用户点击。在项目中,这些被视为提供最小单元的浏览器自动化,因此称之为浏览器自动化原子(Browser Automation Atom)。最后,还有适配层来组合这些原子单元以满足WebDriver和Core的API协议。

图 3:Selenium Javascript库的层次结构

选择Closure库基于几种原因。主要理由是Closure编译器理解库使用的模块化技术。Closure编译器的目标是输出Javascript。“编译”可以简单到按照依赖顺序查找输入文件、串联并漂亮的打印出来,也可能复杂到进行精细的改动和删除死代码。另一种不可否认的优势是团队中采用Javascript编程的几位成员对Closure库非常熟悉。

当需要与DOM交互时,“原子”库的代码会被用于项目中的各个角落。对于RC和那些大部分由Javascript编写而成的driver来说,这些库被直接使用,通常编译为单个巨大的脚本。对于采用Java编写的driver,来自WebDriver适配层的各个函数在编译的时候会启用完整优化,生成的Javascript在JAR中作为资源包含进来。对于采用C语言编写的driver,如iPhone IE驱动,不仅各个函数被通过完整优化来编译,而且生成的输出文件被转换成定义在头文件中的常量,通过driver的正常Javascript执行机制来执行。虽然这看起来有些奇怪,但是这种做法使Javascript放在底层驱动中,无须在各处暴露原始的代码。

因为原子库应用广泛,所以在不同浏览器之间确保一致的行为是可行的,因为库采用Javascript编写,而且无需提升权限来执行开发周期,所以方便、快捷。Closure库可以动态加载依赖,因此Selenium开发人员只需编写测试并在浏览器中加载,修改代码并在需要时点击刷新按钮。一旦测试在浏览器中通过,很容易在另一个浏览器中加载并确保通过。因为Closure库在抽象屏蔽浏览器之间的差异方面做得很好,这就足够在持续构建中在每一种支持的浏览器中运行测试集以衡量是否通过。

最初Core和WebDriver存在许多相同的代码——通过略微不同的方式执行相同的功能。当我们开始关注原子库时,这些代码被重新梳理,我们努力找出最合适的功能。毕竟,两个项目都被广泛应用,它们的代码非常健壮,因此把一切都丢掉从零开始不仅浪费而且愚蠢。通过对每个原子库的分析,我们找出了可以使用的部分。例如,Firefox driver的getAttribute方法从大约50行缩减到几行,包括空白行在内:

FirefoxDriver.prototype.getElementAttribute =
function(respond, parameters) {
    var element = Utils.getElementAt(parameters.id, respond.session.getDocument());
    var attributeName = parameters.name;
    respond.value = webdriver.element.getAttribute(element, attributeName);
    respond.send();
};

倒数第二行中,respond.value的赋值调用了原子级的WebDriver库。

原子库是本项目若干架构思想的实际演示。当然,它们满足了API的实现应该倾向于Javascript的需求。更出色的是,用一个库在代码库中分享,以前一个缺陷需要在多种实现中验证和修复,现在只需在一个地方修改即可,这种做法降低了变化的成本,同时提高了稳定性和有效性。原子库也使项目的“巴士”因素更优化。因为通常的Javascript单元测试可以用于验证缺陷是否修复,所以参与到开源项目中的障碍要比之前需要了解每一个driver如何实现的时候更低。

使用原子库还有另外一个好处。模拟现有RC实现但由WebDriver支持的分层对团队尝试以可控的方式迁移到更新的WebDriver API是一种重要的工具。因为Selenium Core是原子化的,所以单独编译每一个函数是可行的,使得编写这种模拟层易于实现而且更准确。

当然,这种做法也存在缺点。最重要的是,把Javascript编译成C常量是一种非常奇怪的事情,它总是阻碍那些想参与C语言编程的项目贡献者。而且很少有开发人员能够了解所有浏览器并致力于每一种浏览器上运行所有测试——很可能有人会不小心在某处引入回归问题,我们需要花时间找到问题,如果持续构建很多的话则更需精力。

因为原子库规范了浏览器之间的返回值,所以可能存在意想不到的返回值。例如,考虑如下HTML:

<input name="example" checked>

checked属性值依赖于使用的浏览器。原子库规范了该值和HTML 5标准中定义的其他Boolean属性为“true”或者“false”。当该原子量被引入代码库后,我们发现有许多地方大家都做了依赖于浏览器的假设(觉得返回值应该是什么样的)。虽然这些值现在都一致了,但是我们花了很长时间来向社区解释发生了哪些变化以及这样做的原因。


Fay-UE5开源框架:从零构建交互式数字人的完整指南 数字人技术是虚拟现实与人工智能交叉领域的关键应用,其核心原理在于通过实时数据驱动3D模型的面部表情、口型与肢体动作,实现拟人化交互。从技术价值看,它解决了传统动画制作效率低下、口型同步不自然等痛点,大幅降低了虚拟主播、AI客服等应用的开发门槛。在应用场景上,数字人已广泛应用于直播电商、企业服务、教育培训等领域,成为连接用户与数字化服务的重要媒介。本文聚焦于Fay-UE5这一开源框架,它通过集成语音识别、音素驱动、实时通信等模块,为开发者提供了一套完整的数字人解决方案。针对行业高频搜索的“ue5数字人”和“a 阅读详情

相关推荐

REPENTOGON完整指南:解决以撒忏悔Mod成就锁定,解锁终极模组体验

在游戏模组生态中,玩家常常面临“启用修改器则禁用成就”的困境,这一限制深刻影响着单机游戏的完整体验。以《以撒的结合》为例,官方对于Mod的成就锁定机制,曾让无数玩家在功能增强与全成就进度之间艰难取舍。REPENTOGON作为一款社区驱动的开源Mod框架,通过DLL注入方式运行于游戏之上,从底层扩展了API接口,允许第三方模组深度修改游戏逻辑,同时绕过了官方的成就禁用判定,实现了Mod便利性与成就完整性的共存。这类框架的出现,不仅改变了游戏Mod的加载方式,更推动了模组生态向更复杂、更实用的方向发展。无论是想

weixin_33417488的博客 333

爬虫 + 自动化利器---selenium详解以及实战项目

什么是seleniumSelenium是一个用于Web应用程序测试的工具。只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。Selenium测试套件直接运行在浏览器中,就像真正的用户在操作浏览器一样。Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。Selenium工具的主要功能包括:测试程序与浏览器的兼容性,测试你的应用程序是否能够很好得工作在不同浏览器和操作系统之上。

m0_52336378的博客 9051

浏览器广告拦截插件安装指南:uBlock Origin、AdGuard与Adblock Plus选型与排查

浏览器扩展是增强网页功能、优化浏览体验的重要工具,而广告过滤则是其中应用最广的典型场景。网页加载时,浏览器会同时请求大量资源,广告请求与正常内容混在一起,影响加载速度与视觉体验。广告拦截技术的核心原理,就是通过维护过滤规则库,在浏览器请求到达页面之前识别并阻止广告域名和URL特征,从而净化页面内容。广告拦截插件不仅减少视觉干扰,还能降低网络请求数量、提升页面响应速度,在新闻门户、视频网站等广告密集场景中尤为实用。实际使用时,用户常面临安装来源不明、扩展冲突、规则误伤、视频白屏或网站检测拦截等工程实践问题。本

weixin_34295316的博客 945

Selenium WebDriver有哪些代码框架?

Selenium WebDriver本身是一个用于自动化Web应用程序测试的库,可以使用各种代码框架和设计模式来组织和管理测试代码。

weixin_60941456的博客 274

Selenium学习(一) Selenium概述

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。 测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。 S

3603

AGV舵轮选型实战:从核心参数到精准计算的完整指南

本文提供了一份详尽的AGV舵轮选型实战指南,强调从经验决策转向数据驱动。文章系统讲解了如何将工况需求转化为核心参数,并通过牵引力、扭矩、功率等关键计算步骤,指导工程师完成精准选型,避免因选型不当导致的运行故障与效率低下。

醉三国 495

Java自动化测试(webdriver常用API 24)

元素基本APIclick触发当前元素的点击事件driver.get("https://www.ketangpai.com/"); WebElementelement=...

测试游记 306

ESP-Mesh-Lite vs ESP-Mesh:如何选择适合你的物联网组网方案?

本文深入对比了乐鑫ESP-Mesh-Lite与ESP-Mesh两种物联网组网方案的核心差异。重点解析了ESP-Mesh-Lite分布式协议栈架构的优势,即每个节点拥有独立IP,可直接访问外部网络,极大简化了应用层开发。文章从网络架构、性能、开发体验及适用场景等多维度进行分析,为开发者根据项目需求(如分布式数据采集、智能家居或集中控制网络)选择最合适的方案提供了清晰的决策框架。

pluto的博客 817

Selenium框架简介

Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。具有如下特点:    一、多浏览器支持            可以对多浏览器进行测试,如IE、Firefox、Safari、Chrome、Android手机浏览器等。    二、支持多种语言           如Java、C#、Pyt

王练的博客 3万+

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

NSGA(非支配排序遗传算法)

在多目标优化问题中,往往存在多个相互冲突的目标需要同时优化。传统的单目标优化算法无法直接应用于这类问题,因此需要专门的多目标优化算法。非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA)是一种经典的多目标优化算法,由印度科学家 Kalyanmoy Deb 等人于 1995 年提出。NSGA 通过非支配排序和拥挤度距离来引导种群向 Pareto 最优前沿进化,从而得到一组具有良好分布性和收敛性的 Pareto 最优解。

2974

Katalon Studio vs 基于Selenium的开源框架

Katalon Studio是一个复用Selenium核心引擎的测试自动化解决方案,尽管使用了诸多Selenium的功能,它并不是简单地对Selenium进行包装。本文档详细比较了Katalon和基于Selenium的开源框架,重点关注目标用户、部署、测试管理和脚本语言支持、性能、可用性以及与其他工具集成等关键特性。 1. 目标用户 软件测试自动化通常需要技术技能和有关被测应用程序(AUT)的...

所有关于软件测试 1780

第076篇:大涡模拟进阶

大涡模拟(Large Eddy Simulation, LES)是介于直接数值模拟(DNS)和雷诺平均方法(RANS)之间的重要湍流模拟方法。本文深入介绍动态Smagorinsky模型、尺度相似模型、WALE模型和隐式LES等高级亚格子模型。通过Python实现槽道湍流和圆柱绕流的LES求解器,详细展示近壁面处理、动态系数计算和亚格子应力建模技术。大涡模拟,亚格子模型,动态模型,Smagorinsky,WALE模型,尺度相似模型,近壁面处理,槽道湍流LES的核心思想是对Navier-Stokes方程进行空间

2401_87715305的博客 740

Selenium——开源的自动化测试框架

Selenium是一个很好的多平台多浏览器的自动化测试框架,Selenium提供了2种运行模式——Core和Remote Control(RC),除此之外,ThoughtWorks还为Selenium提供了Firefox的Add-on——Selenium IDE以及RC模式的扩展Selenium Grid。现在的版本为Selenium 1.0 beta-1 released (March 5, 2

happylife1527的专栏 1163

反爬虫:对抗最新反爬技术 Cloudflare详解

本文针对Cloudflare最新反爬机制提供完整解决方案,覆盖TLS指纹、行为轨迹、设备指纹等检测场景。文章首先分析Cloudflare的三重检测体系(TLS指纹、行为指纹、设备指纹)及其拦截表现,随后提出四种绕过方案:1)使用curl_cffi模拟浏览器TLS指纹;2)通过undetected-chromedriver移除自动化特征;3)Playwright结合stealth插件模拟人类行为;4)动态请求调度策略。重点推荐轻量级Python方案curl_cffi和浏览器自动化方案Playwright-st

数据知道的博客 4626

电机控制的智慧之眼:全面解析FOC状态观测器

摘要:本文深入探讨磁场定向控制(FOC)中的状态观测器技术,重点分析其在无传感器电机控制中的关键作用。文章详细介绍了滑模观测器(SMO)、扩展卡尔曼滤波(EKF)、龙贝格观测器和高频注入法等主流观测器的工作原理、技术特点及适用场景,其中SMO因结构简单、鲁棒性强成为当前主流方案。同时阐述了观测器与锁相环(PLL)结合的工程实践方案,并针对不同应用场景提供了观测器选型建议。文章还探讨了启动问题处理、参数敏感性等工程挑战的解决方案,以及混合观测器、AI应用等未来发展趋势。这些观测器技术使电机系统在无机械传感器情

汽车软件开发 274

Selenium简介

什么是Selenium? Selenium最初是由ThoughtWorks公司一个叫Jason R. Huggins的工程师和他的团队开发出来 Selenium是仅针对Web系统的一款自动化测试工具 Selenium是免费的、开源的,很多公司选择Selenium和它是免费的有很大关系 Selenium不是一个工具,它是一系列工具的总称 Selenium支持多种编程语言 Selen...

YOYO的博客 4273

canoe安装完成开启之后因为VectorDeviceParams30_64.dll报错崩溃打不开...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1079

python+selenium 开源分享

说明 之前分享过自己写的appium框架,有很多待优化的地方,先从selenium开始优化 功能 yaml维护用例 支持多检查点 excel记录报告,失败有截图展示 本地记录日志 参数化测试用例管理 用法 配置openurl.yaml openurl: http://www....com/login 配置用例yaml testinfo: - id: 001 ...

weixin_45722061的博客 348

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Selenium 介绍

由于 Selenium 是一个开源工具,因此不涉及许可成本,这与其他测试工具相比是一个很大的优势。Selenium 测试脚本支持使用 Java、Python、C#、PHP、Ruby、Perl 和.Net 中的任何一种编程语言编写Selenium 测试可以在 Windows、Mac 或 Linux 中进行。Selenium 测试可以使用以下任何一种浏览器运行:Mozilla Firefox、Internet Explorer、Google Chrome 和 Safari 等。

onforget的博客 1124

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python - Selenium(Web 自动化开源工具)

是一个强大的 Web 自动化开源工具,广泛应用于自动化测试、数据爬取和浏览器操作模拟等领域。Selenium提供一套测试函数,用于支持Web自动化测试,能够完成界面元素定位、窗口跳转、结果比较等。,既不能使用 Selenium 测试任何桌面(软件)应用程序,也不能测试任何移动应用程序。

MinggeQingchun的博客 1338

Selenium:开源自动化测试框架的Java实战解析

Selenium作为一款开源的自动化测试框架,以其强大的功能和广泛的兼容性,在Web应用程序自动化测试领域发挥着重要作用。通过Java编写的Selenium测试脚本,可以充分利用Java的面向对象特性和Selenium的丰富API,实现高效、稳定的自动化测试。希望本文能够帮助你更好地理解Selenium,并在实际项目中加以应用。

喜欢猪猪 1302

转实用文章:常用开源协议详细解析

开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的.开源运动同样有自己的游戏规则和道德准则.不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿.  首先,要对几个概念有所了解:   1. Contributors 和 Recipients  Contributors 指的是对某个开源软件...

weixin_34295316的博客 535

Selenium

自动化测试时,有些元素不适合直接点击或者进行某些操作时,可以使用Selenium的Actions类来模拟鼠标键盘操作,通过Actions对象可以发起鼠标左键、右键、移动鼠标等操作。并且不是input元素,那么这种情况就很棘手了,必须使用一些第三方的工具,比如autoit等来完成。用于Web应用程序测试的工具,Selenium是开源并且免费的,Selenium测试直接在浏览器中运行,就像真实用户所作的一样。xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标。

m0_61219786的博客 644

自动化测试工具-selenium介绍及基本使用方法

Selenium是一个开源、免费、简单、灵活,对Web浏览器支持良好的自动化测试工具,在UI自动化、爬虫等场景下是十分实用的,能够熟练掌握并使用Selenium工具可以大大的提高效率。

weixin_43805705的博客 5804
上一篇: javascript中的沙箱
下一篇: 开源应用架构之​Selenium WebDriver(上)
liubofengpython
博客等级 码龄15年 23粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值