Skip to content

Instantly share code, notes, and snippets.

@horitaku1124
Last active February 7, 2020 15:05
Show Gist options
  • Save horitaku1124/c75ca3a355327ea56c23264050d8944b to your computer and use it in GitHub Desktop.
Save horitaku1124/c75ca3a355327ea56c23264050d8944b to your computer and use it in GitHub Desktop.
Setup selenium grid
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.openqa.selenium.OutputType
import org.openqa.selenium.TakesScreenshot
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.firefox.FirefoxOptions
import org.openqa.selenium.remote.RemoteWebDriver
import java.io.File
import java.net.URL
class RemoteTest {
var driver: WebDriver? = null
@Before
fun setup() {
// val option = FirefoxOptions()
val option = ChromeOptions()
option.setHeadless(true);
driver = RemoteWebDriver(URL("http://192.168.33.10:4444/wd/hub"), option)
}
@Test
fun test1() {
driver!!.get("http://www.google.com");
val ss = (driver as TakesScreenshot).getScreenshotAs(OutputType.FILE)
ss.renameTo(File("./ss1.png"))
}
@After
fun dispose() {
if (driver != null) {
driver!!.quit();
}
}
}

install

mkdir ~/selenium && cd ~/selenium
wget https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar
sudo apt-get install default-jdk

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list

sudo apt-get update
sudo apt-get install google-chrome-stable
wget https://chromedriver.storage.googleapis.com/80.0.3987.16/chromedriver_linux64.zip
unzip chromedriver_linux64.zip

Hub

cd ~/selenium
DISPLAY=:0 java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone-3.141.59.jar -role hub

Node

cd ~/selenium
DISPLAY=:0 java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:4444
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "bento/ubuntu-19.10"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
config.vm.provision "shell", inline: <<-SHELL
apt-get update -y
apt update -y
DEBIAN_FRONTEND=noninteractive apt install xfce4 firefox -y
sed -ie 's/# AutomaticLoginEnable/AutomaticLoginEnable/' /etc/gdm3/custom.conf
sed -ie 's/# AutomaticLogin = user1/AutomaticLogin=vagrant/' /etc/gdm3/custom.conf
sudo bash -c 'echo "@reboot root /root/gdmstart" >> /etc/crontab'
echo '#!/bin/bash' >> ~/gdm_start.txt
echo 'sleep 6' >> ~/gdm_start.txt
echo '/usr/sbin/service gdm start' >> ~/gdm_start.txt
sudo mv ~/gdm_start.txt /root/gdmstart
sudo chmod u+x /root/gdmstart
SHELL
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment