当前位置: 首页 > 知识库问答 >
问题:

为什么Selenium不使用JS?

须敏学
2023-03-14

我是一个新手,学习Javascript已经有一段时间了,唯一的目的是用它来编写硒自动化(最终的目的是李尔QA自动化)。

问题是,当谈到语言时,我完全感到困惑。我在Selenium文档和Scriptp示例中看到的都是类似“driver.FindElement”、“sendKeys”、“getTitle”等函数。

据我所知,(纯)Javascript不使用这些函数,而是使用“document.getElementById”、“document.title”等。

当Selenium说“sendKeys”时,您能帮我确定它使用的是什么语言吗?为什么在我找到的所有关于SeleniumJavaScript的文档中,我只看到“getTitle”而不是“document.title”?我所了解到的纯JS不适用于此工具?

我知道这可能是你见过的最愚蠢的问题之一,但在我了解这里发生的事情之前,我无法继续学习。谢谢

共有1个答案

艾望
2023-03-14

document.getElementById和document.title是JavaScript超文本标记语言DOM API。您可以使用它在JavaScript中编写自动化脚本。

但您必须在浏览器端运行这样的自动化脚本,或者在浏览器的DevTool控制台中运行,或者通过HTML页面包含您的自动化脚本

考虑如何将自动化脚本注入非您所有的网站的网页。即使您测试您自己的网站,只要页面正在加载,您的自动化脚本就会被加载并执行。管理运行过程、将网站打包为在网站页面上包含自动化脚本等,以及仅使用JavaScript编写自动化脚本,对您来说都很困难。

因此,使用这种方式来自动化网页并不是一个明智的解决方案

Selenium是一个依赖于Web驱动程序的Web自动化工具。Web驱动程序充当Selenium API和真实浏览器之间的代理。每个浏览器厂商都会开发和维护自网络驱动程序(网络驱动程序是一个可执行的二进制文件),但是所有的浏览器厂商都必须遵循网络驱动程序W3C规范来实现自网络驱动程序,这样当你的脚本在不同的浏览器中在同一个页面上调用相同的Selenium API时,你就可以得到相同的结果...

比如驱动程序。findElement驱动程序。sendKeys是用于编写自动化脚本的selenium API。selenium提供了不同的语言API,如python、javascript、Java、ruby、c#、VBA、perl和php。您可以选择首选的脚本语言。方法名称、用法在不同的语言API上是不同的。

Webdriver二进制只能接受http请求,不能执行Selenium API的方法/函数。您可以认为,当webdriver二进制启动时,http服务器在其中运行,以接受从自动化脚本发送的http请求。

实际上,每种语言的selenium API都实现了将所有API的方法转换为超文本传输协议请求,然后将请求发送到运行的WebDrive二进制文件,然后WebDrive二进制文件将超文本传输协议请求转换为浏览器上的操作。

与浏览器通信的WebDriver二进制文件的所有实现都使用通用的有线协议。这个连线协议定义了一个RESTful Web服务,它使用了HTTP上的JSON,命名为WebDriver JSON连线协议。

 类似资料:
  • 问题内容: 据我所知,由于安全性,在JavaScript中使用JSON对象被认为是不好的做法。如果JSON来自其他服务器,我可以理解此问题。 但是,如果JSON是由我自己的服务器提供的,并且是使用PHP创建的(我们假设它不是越野车),那么简单地使用JS中的JSON读取是否合法,或者我目前无法想到任何安全问题? ? 我真的不想处理动态加载JSON解析器的问题,因此很高兴使用。 PS:很明显,我将使用

  • 这是我有生以来第一次发现自己正在编写一个开源的Java API。希望能被列入许多其他项目。 对于日志记录,我(以及与我一起工作的人)一直使用JUL(java.util.logging),从来没有遇到过任何问题。然而,现在我需要更详细地了解我应该为我的API开发做些什么。我对此做了一些研究,我得到的信息让我更加困惑。因此有了这篇文章。 因为我是从七月来的,所以我对此有偏见。我对其余的知识不是那么多。

  • 我尝试了几种方法通过selenium(使用python)在Firefox中打开控制台,但这些方法都不起作用,尽管我没有得到任何故障排除,除了最后一个。 Selenium 3.141.0、Firefox 68.0、geckodriver-v0.24.0-win64

  • 问题内容: 我阅读的源代码,很惊讶地发现它不使用Knuth–Morris–Pratt算法?众所周知,KMP更有效。那么为什么不使用它呢? 我周围的人告诉我,对于短字符串KMP来说已经足够了,但是如果您需要性能并且打算与大字符串一起使用,则不是一个好选择。但是他没有告诉我细节。 所以,这是我的问题: 为什么我们不使用KMP ? 为什么KMP对于大字符串不是一个好选择? 问题答案: KMP在最坏情况下

  • eval 函数会在当前作用域中执行一段 JavaScript 代码字符串。 var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。 var fo