编写您的第一个 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、警报等。

        var 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. 请求元素信息

元素存储了许多可以请求的信息

        var value = message.Text;
    let value = await message.getText();
        val value = message.getText()

8. 结束会话

这将结束驱动程序进程,默认情况下也会关闭浏览器。没有更多的命令可以发送到此驱动程序实例。请参阅退出会话

运行 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