编写第一个Selenium脚本
当你完成 Selenium安装 and 驱动安装 后, 便可以开始书写Selenium脚本了.
八个基本组成部分
Selenium所做的一切, 就是发送给浏览器命令, 用以执行某些操作或为信息发送请求. 您将使用Selenium执行的大部分操作, 都是以下基本命令的组合:
1. 使用驱动实例开启会话
有关启动会话的更多详细信息, 请阅读我们关于打开和关闭浏览器的文档
driver = new ChromeDriver();
driver = webdriver.Chrome()
var driver = new ChromeDriver();
driver = Selenium::WebDriver.for :chrome
let driver = await new Builder().forBrowser('chrome').build();
driver = ChromeDriver()
2. 在浏览器上执行操作
在本例中, 我们 导航 到一个网页.
driver.get("https://google.com");
driver.get("https://google.com")
driver.Navigate().GoToUrl("https://google.com");
driver.get('https://google.com')
await driver.get('https://www.google.com');
driver.get("https://google.com")
3. 请求 浏览器信息
您可以请求一系列关于浏览器的信息 , 包括窗口句柄、浏览器尺寸/位置、cookie、警报等.
String title = driver.getTitle();
title = driver.title
var title = driver.Title;
title = driver.title
await driver.getTitle();
title = driver.title
4. 建立等待策略
将代码与浏览器的当前状态同步 是Selenium面临的最大挑战之一, 做好它是一个高级主题.
基本上, 您希望在尝试定位元素之前, 确保该元素位于页面上, 并且在尝试与该元素交互之前, 该元素处于可交互状态.
隐式等待很少是最好的解决方案, 但在这里最容易演示, 所以我们将使用它作为占位符.
阅读更多关于等待策略 的信息.
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
driver.implicitly_wait(0.5)
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
driver.manage.timeouts.implicit_wait = 500
driver.manage().setTimeouts({implicit: 1000})
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
5. 发送命令 查找元素
大多数Selenium会话中的主要命令都与元素相关, 如果不先找到元素, 就无法与之交互.
WebElement searchBox = driver.findElement(By.name("q"));
WebElement searchButton = driver.findElement(By.name("btnK"));
search_box = driver.find_element(by=By.NAME, value="q")
search_button = driver.find_element(by=By.NAME, value="btnK")
var searchBox = driver.FindElement(By.Name("q"));
var searchButton = driver.FindElement(By.Name("btnK"));
search_box = driver.find_element(name: 'q')
search_button = driver.find_element(name: 'btnK')
let searchBox = await driver.findElement(By.name('q'));
let searchButton = await driver.findElement(By.name('btnK'));
var searchBox = driver.findElement(By.name("q"))
val searchButton = driver.findElement(By.name("btnK"))
6. 操作元素
对于一个元素, 只有少数几个操作可以执行, 但您将经常使用它们.
searchBox.sendKeys("Selenium");
searchButton.click();
search_box.send_keys("Selenium")
search_button.click()
searchBox.SendKeys("Selenium");
searchButton.Click();
search_box.send_keys('Selenium')
search_button.click
await searchBox.sendKeys('Selenium');
await searchButton.click();
searchBox.sendKeys("Selenium")
searchButton.click()
7. 获取元素信息
元素存储了很多被请求的信息. 请注意, 我们需要重新定位搜索框, 因为自从我们第一次找到它以来, DOM已经发生了变化.
String value = searchBox.getAttribute("value");
value = search_box.get_attribute("value")
var value = searchBox.GetAttribute("value");
value = search_box.attribute('value')
let value = search_box.getAttribute("value");
val value = searchBox.getAttribute("value")
8. 结束会话
这将结束驱动程序进程, 默认情况下, 该进程也会关闭浏览器. 无法向此驱动程序实例发送更多命令.
driver.quit();
driver.quit()
driver.Quit();
driver.quit
await driver.quit();
driver.quit()
组合所有事情
让我们将这8个部分组合成一个完整的脚本, 包括需要使用的库:
按照选项卡底部的链接查看代码示例, 因为它将使用测试运行程序而不是独立文件执行.
package dev.selenium.getting_started;
import org.junit.jupiter.api.Assertions;
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;
import java.time.Duration;
public class FirstScriptTest {
public WebDriver driver;
@Test
public void eightComponents() {
driver = new ChromeDriver();
driver.get("https://google.com");
String title = driver.getTitle();
Assertions.assertEquals("Google", title);
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
WebElement searchBox = driver.findElement(By.name("q"));
WebElement searchButton = driver.findElement(By.name("btnK"));
searchBox.sendKeys("Selenium");
searchButton.click();
searchBox = driver.findElement(By.name("q"));
String value = searchBox.getAttribute("value");
Assertions.assertEquals("Selenium", value);
driver.quit();
}
}
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components():
driver = webdriver.Chrome()
driver.get("https://google.com")
title = driver.title
assert title == "Google"
driver.implicitly_wait(0.5)
search_box = driver.find_element(by=By.NAME, value="q")
search_button = driver.find_element(by=By.NAME, value="btnK")
search_box.send_keys("Selenium")
search_button.click()
search_box = driver.find_element(by=By.NAME, value="q")
value = search_box.get_attribute("value")
assert value == "Selenium"
driver.quit()
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace SeleniumDocs.GettingStarted
{
[TestClass]
public class FirstScriptTest
{
[TestMethod]
public void ChromeSession()
{
var driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://google.com");
var title = driver.Title;
Assert.AreEqual("Google", title);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
var searchBox = driver.FindElement(By.Name("q"));
var searchButton = driver.FindElement(By.Name("btnK"));
searchBox.SendKeys("Selenium");
searchButton.Click();
searchBox = driver.FindElement(By.Name("q"));
var value = searchBox.GetAttribute("value");
Assert.AreEqual("Selenium", value);
driver.Quit();
}
}
}
# frozen_string_literal: true
RSpec.describe 'First Script' do
it 'uses eight components' do
driver = Selenium::WebDriver.for :chrome
driver.get('https://google.com')
title = driver.title
expect(title).to eq('Google')
driver.manage.timeouts.implicit_wait = 500
search_box = driver.find_element(name: 'q')
search_button = driver.find_element(name: 'btnK')
search_box.send_keys('Selenium')
search_button.click
search_box = driver.find_element(name: 'q')
value = search_box.attribute('value')
expect(value).to eq('Selenium')
driver.quit
end
end
const {Builder, By, Key, until} = require('selenium-webdriver');
(async function firstScript() {
try {
let driver = await new Builder().forBrowser('chrome').build();
await driver.get('https://www.google.com');
await driver.getTitle();
driver.manage().setTimeouts({implicit: 1000})
let searchBox = await driver.findElement(By.name('q'));
let searchButton = await driver.findElement(By.name('btnK'));
await searchBox.sendKeys('Selenium');
await searchButton.click();
let search_box = driver.findElement(By.name('q'));
let value = search_box.getAttribute("value");
await driver.quit();
} catch (error) {
console.log(error)
}
})();
package dev.selenium.getting_started
import io.github.bonigarcia.wdm.WebDriverManager
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class FirstScriptTest {
private lateinit var driver: WebDriver
@Test
fun eightComponents() {
driver = ChromeDriver()
driver.get("https://google.com")
title = driver.title
assertEquals("Google", title)
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
var searchBox = driver.findElement(By.name("q"))
val searchButton = driver.findElement(By.name("btnK"))
searchBox.sendKeys("Selenium")
searchButton.click()
searchBox = driver.findElement(By.name("q"))
val value = searchBox.getAttribute("value")
assertEquals("Selenium", value)
driver.quit()
}
}
接下来的步骤
利用你所学的知识, 构建你的Selenium代码.
当您发现需要更多功能时, 请阅读我们的WebDriver文档的其余部分.