为什么Selenium不使用JS?

问题描述 投票:1回答:1

我是一个已经有一段时间学习Javascript的菜鸟,其唯一目的就是使用它来编写Selenium自动化(最终目的是学习QA自动化)。

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

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

你能帮我辨别Selenium使用什么语言,当它说“sendKeys”时?为什么我在Selenium + Javascript的所有文档中都看到“getTitle”而不是“document.title”?我学到的关于纯JS的内容不适用于这个工具吗?

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

javascript selenium
1个回答
1
投票

document.getElementByIddocument.title是JavaScript HTML DOM API。您可以使用它在JavaScript中编写自动化脚本。

但是你必须在浏览器的DevTool控制台中在浏览器端运行这样的自动化脚本,或者通过<script src='<your automation script><script>'将HTML页面包含你的自动化脚本到页面源代码中。

考虑如何将自动化脚本注入不属于您的网站的网页。即使您测试自己的网站,只要页面加载,您的自动化脚本就会被加载并执行。您很难管理正在运行的进程,打包您的网站以在您的网站页面上包含自动化脚本等。并且仅使用JavaScript编写自动化脚本。

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

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

driver.findElementdriver.sendKeys一样是selenium API,您可以使用它来组成自动化脚本。而selenium提供不同的语言API,如python,javascript,Java,ruby,c#,VBA,perl,php。您可以选择首选的脚本语言。方法名称,用法在不同语言API上有所不同。

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

实际上,每种语言的selenium API都实现了将所有API的方法转换为http请求,然后将请求发送到正在运行的webdriver二进制文件,然后webdriver binary将http请求转换为浏览器上的操作。

与浏览器通信的所有WebDriver二进制实现都使用通用的有线协议。此有线协议定义了一个使用JSON over HTTP的RESTful Web服务,名为The WebDriver JSON Wire Protocol,更多细节见here

© www.soinside.com 2019 - 2024. All rights reserved.