硒运行在哪里?

where does selenium run?

我对硒非常困惑。

对自动化测试完全陌生,并努力在 selenium 上站稳脚跟。

http://www.seleniumhq.org/projects/webdriver/

我了解了编写测试的概念,并在 angular 中使用量角器完成了一些测试,但我需要为特定项目使用 selenium,但不确定从哪里开始。

首先,我只想能够编写一些简单的客户端测试,但我不知道从哪里开始使用 Selenium,我阅读了他们的文档,但并不是真的更明智..

webdriver 测试只是一个脚本,用多种兼容语言(java、python 等)之一编写。任何机器上的脚本 运行s。在开发过程中,它通常会在您的本地计算机上 运行,但最终您的测试可能会在持续集成服务器上 运行。

Webdriver 有两种操作模式:它可以在脚本运行的同一台机器上打开浏览器 运行ning,或者它可以向 selenium 网格集线器发送请求,它将在它的节点之一。

作为一个简单的示例,这里是 python 中硒测试的完整工作示例(摘自 python selenium bindings Getting Started 页面):

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

如果您安装了 python 和 selenium 库,您可以将此文件保存到 "example_test.py",然后 运行 从命令提示符 python example_test.py

这是一个类似的测试,这个在 java 脚本中,取自 WebDriverJS User's Guide。你会 运行 它就像你 运行 任何 java 脚本程序一样。

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
 return driver.getTitle().then(function(title) {
   return title === 'webdriver - Google Search';
 });
}, 1000);

driver.quit();

为了有机地回答您的问题,当您 运行 selenium Firefox 浏览器测试时,它会在 30005 之类的端口或其他端口上启动本地临时 "Selenium grid hub listener"的测试。然后,您编写的代码通过将本地 http 请求发送到 localhost:30005 以 JSON 格式与该本地端口通信。侦听该端口的 "Grid hub" 知道如何与您的本地 Web 浏览器对话,并通过回答通过该端口传递的命令来控制它。在测试结束时,"selenium grid hub listener port" 关闭。

如果您阅读并尝试了解 "Selenium Grid Hub" 的工作原理并了解 "WebDriver Wire Protocol",那么它可能会帮助您开始理解我上面解释的内容。

始终阅读官方 Selenium 文档以获取参考,但如果您使用的是 Java,则可以通过使用 Conductor framework 它是 Java 特定的 DSL,因此不能与任何其他 DSL 一起使用。

测试看起来像这样:

@Config(url="http://google.com", browser=Browsers.CHROME)
public class MyTest {
  @Test
  public void testGoogle() {
    // a quick google search
    setText(By.name("q"), "something")
    .click("[name='btnG']");
  }
}