组织和执行 Selenium 代码
内容帮助
如果您想运行不仅仅是少数几个一次性脚本,您需要能够组织和使用您的代码。此页面应该为您提供有关如何使用 Selenium 代码实际执行生产性操作的想法。
常见用途
大多数人使用 Selenium 来执行 Web 应用程序的自动化测试,但 Selenium 支持任何浏览器自动化的用例。
重复性任务
也许您需要登录网站并下载某些内容,或提交表单。您可以创建一个 Selenium 脚本,以在预设时间与服务一起运行。
网络抓取
您是否正在寻找从没有 API 的网站收集数据?Selenium 将允许您执行此操作,但请确保您熟悉网站的服务条款,因为某些网站不允许这样做,其他网站甚至会阻止 Selenium。
测试
运行 Selenium 进行测试需要在 Selenium 执行的操作上进行断言。因此,需要一个好的断言库。为测试提供结构的附加功能需要使用 测试运行器。
IDE
无论您如何使用 Selenium 代码,如果没有良好的集成开发环境,您都无法非常有效地编写或执行它。以下是一些常见选项……
测试运行器
即使您不使用 Selenium 进行测试,如果您有高级用例,使用测试运行器来更好地组织代码也可能是有意义的。能够使用 before/after 钩子并并行或分组运行事物会非常有用。
选择
有许多不同的测试运行器可用。
此文档中的所有代码示例都可以在我们的示例目录中找到(或正在移动到该目录),这些目录使用测试运行器并且在每次发布时执行,以确保所有代码都是正确的并且已更新。以下是带有链接的测试运行器列表。第一项是此存储库使用的项,也是此页面上所有示例将使用的项。
安装
这与安装 Selenium 库中要求的内容非常相似。此代码仅显示我们的文档示例项目中使用的示例。
Maven
Gradle
要在项目中使用它,请将其添加到 requirements.txt
文件中
在项目的 csproj
文件中,在 ItemGroup
中将依赖项指定为 PackageReference
添加到项目的 gemfile
在您的项目的 package.json
中,将需求添加到 dependencies
断言
String title = driver.getTitle();
assertEquals("Web form", title);
title = driver.title
assert title == "Web form"
var title = driver.Title;
Assert.AreEqual("Web form", title);
title = @driver.title
expect(title).to eq('Web form')
let title = await driver.getTitle();
assert.equal("Web form", title);
设置和拆卸
设置
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
拆卸
@AfterEach
public void teardown() {
driver.quit();
}
设置
def setup():
driver = webdriver.Chrome()
driver.get("https://seleniumcn.cn/selenium/web/web-form.html")
return driver
拆卸
def teardown(driver):
driver.quit()
设置
before do
@driver = Selenium::WebDriver.for :chrome
end
拆卸
config.after { @driver&.quit }
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
执行
Maven
mvn clean test
Gradle
gradle clean test
pytest path/to/test_script.py
bundle exec rspec
Mocha
mocha runningTests.spec.js
npx
npx mocha runningTests.spec.js
示例
在第一个脚本中,我们看到了 Selenium 脚本的每个组件。以下是使用测试运行器的代码示例
package dev.selenium.getting_started;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class UsingSeleniumTest {
WebDriver driver;
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
@Test
public void eightComponents() {
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.get("https://seleniumcn.cn/selenium/web/web-form.html");
String title = driver.getTitle();
assertEquals("Web form", title);
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
textBox.sendKeys("Selenium");
submitButton.click();
WebElement message = driver.findElement(By.id("message"));
String value = message.getText();
assertEquals("Received!", value);
}
@AfterEach
public void teardown() {
driver.quit();
}
}
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = setup()
title = driver.title
assert title == "Web form"
driver.implicitly_wait(0.5)
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
text_box.send_keys("Selenium")
submit_button.click()
message = driver.find_element(by=By.ID, value="message")
value = message.text
assert value == "Received!"
teardown(driver)
def setup():
driver = webdriver.Chrome()
driver.get("https://seleniumcn.cn/selenium/web/web-form.html")
return driver
def teardown(driver):
driver.quit()
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted
{
[TestClass]
public class UsingSeleniumTest
{
[TestMethod]
public void EightComponents()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://seleniumcn.cn/selenium/web/web-form.html");
var title = driver.Title;
Assert.AreEqual("Web form", title);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
textBox.SendKeys("Selenium");
submitButton.Click();
var message = driver.FindElement(By.Id("message"));
var value = message.Text;
Assert.AreEqual("Received!", value);
driver.Quit();
}
}
}
# frozen_string_literal: true
require 'spec_helper'
require 'selenium-webdriver'
RSpec.describe 'Using Selenium' do
before do
@driver = Selenium::WebDriver.for :chrome
end
it 'uses eight components' do
@driver.get('https://seleniumcn.cn/selenium/web/web-form.html')
title = @driver.title
expect(title).to eq('Web form')
@driver.manage.timeouts.implicit_wait = 500
text_box = @driver.find_element(name: 'my-text')
submit_button = @driver.find_element(tag_name: 'button')
text_box.send_keys('Selenium')
submit_button.click
message = @driver.find_element(id: 'message')
value = message.text
expect(value).to eq('Received!')
end
end
const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('First script', function () {
let driver;
before(async function () {
driver = await new Builder().forBrowser('chrome').build();
});
it('First Selenium script with mocha', async function () {
await driver.get('https://seleniumcn.cn/selenium/web/web-form.html');
let title = await driver.getTitle();
assert.equal("Web form", title);
await driver.manage().setTimeouts({implicit: 500});
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
await textBox.sendKeys('Selenium');
await submitButton.click();
let message = await driver.findElement(By.id('message'));
let value = await message.getText();
assert.equal("Received!", value);
});
after(async () => await driver.quit());
});
下一步
利用您所学的知识并构建您的 Selenium 代码!
当您发现更多需要的功能时,请阅读我们的其余 WebDriver 文档。