编写您的第一个 Selenium 脚本
构建 Selenium 脚本的逐步说明
一旦您安装了 Selenium,您就可以开始编写 Selenium 代码了。
八个基本组件
Selenium 所做的一切都是向浏览器发送命令以执行某些操作或发送信息请求。您使用 Selenium 所做的大部分事情都是这些基本命令的组合。
点击“在 GitHub 上查看完整示例”的链接,查看上下文中的代码。
1. 启动会话
有关启动会话的更多详细信息,请阅读我们关于驱动程序会话的文档
WebDriver driver = new ChromeDriver();
driver = webdriver.Chrome()
IWebDriver driver = new ChromeDriver();
driver = Selenium::WebDriver.for :chrome
driver = await new Builder().forBrowser(Browser.CHROME).build();
driver = ChromeDriver()
2. 在浏览器上执行操作
在这个例子中,我们正在导航到一个网页。
driver.get("https://selenium.net.cn/selenium/web/web-form.html");
driver.get("https://selenium.net.cn/selenium/web/web-form.html")
driver.Navigate().GoToUrl("https://selenium.net.cn/selenium/web/web-form.html");
driver.get('https://selenium.net.cn/selenium/web/web-form.html')
await driver.get('https://selenium.net.cn/selenium/web/web-form.html');
driver.get("https://selenium.net.cn/selenium/web/web-form.html")
3. 请求浏览器信息
您可以请求许多类型的关于浏览器的信息,包括窗口句柄、浏览器大小/位置、cookie、警报等。
driver.getTitle();
title = driver.title
var title = driver.Title;
driver.title
let title = await driver.getTitle();
val 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
await driver.manage().setTimeouts({implicit: 500});
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500))
5. 查找元素
大多数 Selenium 会话中的大多数命令都与元素相关,并且您不能在没有首先查找元素的情况下与之交互。
WebElement textBox = driver.findElement(By.name("my-text"));
WebElement submitButton = driver.findElement(By.cssSelector("button"));
text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
var textBox = driver.FindElement(By.Name("my-text"));
var submitButton = driver.FindElement(By.TagName("button"));
text_box = driver.find_element(name: 'my-text')
submit_button = driver.find_element(tag_name: 'button')
let textBox = await driver.findElement(By.name('my-text'));
let submitButton = await driver.findElement(By.css('button'));
var textBox = driver.findElement(By.name("my-text"))
val submitButton = driver.findElement(By.cssSelector("button"))
6. 对元素执行操作
只有少数对元素执行的操作,但您会经常使用它们。
textBox.sendKeys("Selenium");
submitButton.click();
text_box.send_keys("Selenium")
submit_button.click()
textBox.SendKeys("Selenium");
submitButton.Click();
text_box.send_keys('Selenium')
submit_button.click
await textBox.sendKeys('Selenium');
await submitButton.click();
textBox.sendKeys("Selenium")
submitButton.click()
7. 请求元素信息
元素存储了许多可以请求的信息。
message.getText();
text = message.text
var value = message.Text;
message.text
let value = await message.getText();
val value = message.getText()
8. 结束会话
这将结束驱动程序进程,默认情况下也会关闭浏览器。没有更多的命令可以发送到此驱动程序实例。请参阅退出会话。
driver.quit();
driver.quit()
driver.Quit();
driver.quit
await driver.quit();
driver.quit()
运行 Selenium 文件
mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test
pytest path/to/test_script.py
ruby example_script.rb
node example_script.spec.js
下一步
大多数 Selenium 用户执行许多会话,需要组织它们以最大限度地减少重复并使代码更易于维护。继续阅读以了解如何将此代码与您的用例相关联,请参阅使用 Selenium。