Selenium

Table of Contents

1. Selenium

Selenium 是自动测试 Web 应用程序的工具,它通过 WebDirver 来模拟用户在浏览器上的点击和输入等事件。

参考:
Selenium Documentation: http://www.seleniumhq.org/docs/
Selenium API documentation (Java): http://seleniumhq.github.io/selenium/docs/api/java/index.html
Selenium API documentation (Python): http://seleniumhq.github.io/selenium/docs/api/py/

1.1. Java 依赖包

在 maven 工程的 pom.xml 中增加下面依赖即可:

    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>3.6.0</version>
    </dependency>

2. Selenium 使用实例

2.1. 准备环境

2.1.1. 方式一

2.1.2. 方式二(推荐)

直接使用现成的 docker image(测试所用浏览器运行在 docker container 中,需要的 WebDriver 驱动已经安装好):

$ docker run -d -p "4444:4444" -p "5900:5900" selenium/standalone-chrome-debug

测试时,使用“http://localhost:4444/wd/hub” 作为 RemoteWebDriver 的 remoteAddress 参数即可。如果想要看到浏览器的具体操作步骤,可以用 VNC 客户端连接 localhost:5900(vnc 密码为“secret”)。

参考:
https://hub.docker.com/u/selenium/
https://github.com/SeleniumHQ/docker-selenium
https://github.com/SeleniumHQ/docker-selenium/wiki/Getting-Started-with-Hub-and-Nodes

2.2. 测试代码

下面使用 Selenium 自动在百度中搜索关键字“Cheese!”的例子:

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class App {
    public static void main(String[] args) throws MalformedURLException {
        WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.chrome());

        // And now use this to visit Baidu
        driver.get("http://www.baidu.com");
        // Alternatively the same thing can be done like this
        // driver.navigate().to("http://www.baidu.com");

        // Find the text input element by its id
        WebElement element = driver.findElement(By.id("kw"));

        // Enter something to search for
        element.sendKeys("Cheese!");

        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());

        // Baidu's search is rendered dynamically with JavaScript.
        // Wait for the page to load, timeout after 10 seconds
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

        System.out.println("Page title is: " + driver.getTitle());

        // Close the browser
        driver.quit();
    }
}

用 VNC 客户端连接 localhost:5900 即可看到浏览器的具体操作步骤。

上面例子参考自:http://www.seleniumhq.org/docs/03_webdriver.jsp#introducing-the-selenium-webdriver-api-by-example

Author: cig01

Created: <2017-03-25 Sat>

Last updated: <2017-11-03 Fri>

Creator: Emacs 27.1 (Org mode 9.4)