準備環境
拉取鏡像
docker pull selenium/hub
docker pull selenium/node-chrome
創建網絡
docker network create --subnet=172.18.26.0/24 dockernet_br26
啓動容器
docker run -d -p 4444:4444 --net dockernet_br26 --ip 172.18.26.2 --name selenium-hub selenium/hub
docker run -d --net dockernet_br26 --ip 172.18.26.3 -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-chrome
通過宿主機IP加上4444 端口進行訪問
http://IP:4444/wb/hub
或者訪問 console http://ip:4444/wb/console
如此即爲安裝成功
編碼
這裏使用java進行編碼測試
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
import java.net.URL;
import java.time.Duration;
import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated;
public class testRemote {
@Test
public void test1() {
URL url = null;
try {
url = new URL("http://IP:4444/wd/hub/");
} catch (Exception e) {
System.out.println(e.getCause());
}
ChromeOptions chromeOptions = new ChromeOptions();
// chromeOptions.setCapability("browserVersion", "81");
// chromeOptions.setCapability("platformName", "linux");
DesiredCapabilities DesiredCapabilities = new DesiredCapabilities("chrome", "83", Platform.LINUX);
chromeOptions.addArguments("--headless");
// chromeOptions.addArguments("--disable-extensions"); // disabling extensions
// chromeOptions.addArguments("--disable-gpu"); // applicable to windows os only
// chromeOptions.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
// chromeOptions.addArguments("--no-sandbox");
WebDriver driver = new RemoteWebDriver(url, chromeOptions);
driver.get("http://www.baidu.com");
System.out.println(driver.getTitle());
driver.quit();
}
}
控制檯打印:
百度一下,你就知道 即代表測試通過
這時我們就可以通過 WebDriver WebElement 編寫代碼實現自動化測試。但這樣有一點很不好的就是需要針對每一個功能去編寫對應的測試代碼。
編寫Bean 類獲取頁面元素
同樣我們也可以引入新的工具去實現自動錄入腳本代碼(badbody)。當然手寫的更靠譜一些,且目前因爲各大瀏覽器廠商的兼容性不同,不同的網站對於安全策略的使用方式不同的原因,自動錄入也會有一些限制。