撰寫您的第一個 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.dev.org.tw/selenium/web/web-form.html");
driver.get("https://selenium.dev.org.tw/selenium/web/web-form.html")
        driver.Navigate().GoToUrl("https://selenium.dev.org.tw/selenium/web/web-form.html");
driver.get('https://selenium.dev.org.tw/selenium/web/web-form.html')
    await driver.get('https://selenium.dev.org.tw/selenium/web/web-form.html');
        driver.get("https://selenium.dev.org.tw/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