Перейти к содержимому

Фотография

ChromeDriver иногда зависает на запуске Chrome

chromedriver chrome jenkins fe automation

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 lexis2001

lexis2001

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Алексей Романов

Отправлено 06 октября 2016 - 09:03

Нужна помощь в решении сложного случая.
Периодически браузер хром не стартует. Просто висит на запуске, или запустился но ChromeDriver не может с ним связатся.

Используется jenkins, xvfb-run и длинная серия front-end тестов. Всё работает, но не стабильно.

В логе chromedriver.log наиболее информативные ошибки это:

 

[1.272][DEBUG]: DevTools request: http://localhost:12216/json/version
[1.272][DEBUG]: DevTools request failed
 
Все остальные ошибки есть и в успешно пройденных билдах. Потому я думаю не стоит на них обращать внимания.
Полную версию лога можно увидеть по ссылке ниже на гугл форуме chromedriver-users.

 

Версия как хрома так и хромдрайвера самая последняя. То есть 2.24 и 53.
Было время помогал параметр --no-sandbox. Но теперь не помогает.

 

Эта же тема в groups.google.com: https://groups.googl...ers/2pxHCAINxX0

 

Почитал официальные рекомендации от разработчиков хромдрайвера:

https://sites.google...e-doesn-t-start

If your issue only occurs in a special, uncommon testing environment, be aware that the ChromeDriver devs may choose not to investigate/resolve your issue.

 

Судя по всему проблема лежит в testing environment. Только я не знаю как его правильно настроить для этого хромдрайвера, что ему может мешать.

Кто сталкивался с таким?

 


  • 0

#2 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 07 октября 2016 - 01:25

с предыдущей (ими) версиями SeleniumDriver пробовали ?


  • 0

#3 lexis2001

lexis2001

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Алексей Романов

Отправлено 07 октября 2016 - 12:17

пробовал с предыдущей, то же самое.
более старые уже не поддерживают актуальную версию хрома


  • 0

#4 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 07 октября 2016 - 13:57

и их тоже - так достаточно часто делают.

 

https://sites.google...river/downloads

http://stackoverflow...rsion-of-chrome

 

особенно если в облаке - вот например

 

https://github.com/dhoer/chef-chrome

https://forge.puppet...n/google_chrome


  • 0

#5 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 08 октября 2016 - 17:29

вот пример Vagrantfile который устанавливает "downlevel" FF, Chrome, ChromeDriver и Selenium

hub доступен на http://127.0.0.1:444...source/hub.html

 

 

с небольшой задержкой 

после 

export PROVISION_SELENIUM=true
vagrant up
# Standalone ubuntu box with tmux-driven Fluxbox autologin and  Selenium Server, Chrome and Firefox 
# based on : https://github.com/Anomen/vagrant-selenium/blob/master/script.sh

provision_selenium = ENV.fetch('PROVISION_SELENIUM', '')
selenium_version = ENV.fetch('SELENIUM_VERSION', '2.47')
chromedriver_version = ENV.fetch('CHROMEDRIVER_VERSION', '2.16')
firefox_version = ENV.fetch('FIREFOX_VERSION', '40.0.3')
chrome_version = ENV.fetch('CHROME_VERSION', '50.0.2661.75')


# check if requested Chrome version is available on http://www.slimjetbrowser.com
available_chrome_versions = %w|
    53.0.2785.116
    52.0.2743.116
    51.0.2704.84
    50.0.2661.75
    49.0.2623.75
    48.0.2564.109
    |
unless available_chrome_versions.include?(chrome_version)
  puts "Very few specific old Chrome versions available :\n" + available_chrome_versions.join("\n")
  exit
  # See also: https://google-chrome.en.uptodown.com/ubuntu/old
end

VAGRANTFILE_API_VERSION = '2'
basedir = ENV.fetch('HOME','') || ENV.fetch('USERPROFILE', '')
box_memory = ENV.fetch('BOX_MEMORY', '2048').to_i
basedir = basedir.gsub('\\', '/')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = 'ubuntu/trusty64'
  # Localy cached images from http://www.vagrantbox.es/ and  http://dev.modern.ie/tools/vms/linux/
  # config_vm_box_name ='trusty-server-cloudimg-amd64-vagrant-disk1.box'
  config_vm_box_name = 'trusty-server-amd64-vagrant-selenium.box'
  config.vm.box_url = "file://#{basedir}/Downloads/#{config_vm_box_name}"
  config.vm.network :forwarded_port, guest:4444, host:4444
  config.vm.network :private_network, ip: '192.168.33.10'
  config.vm.provision 'shell', inline: <<-END_OF_PROVISION

#!/bin/sh
#=========================================================
# set -x
#=========================================================
echo 'Install the packages...'
#=========================================================
sudo apt-get -qq update
sudo apt-get -qqy install fluxbox xorg unzip vim default-jre rungetty wget
#=========================================================
echo "Set autologin for the Vagrant user..."
#=========================================================
sudo sed -i '$ d' /etc/init/tty1.conf
sudo echo 'exec /sbin/rungetty --autologin vagrant tty1' >> /etc/init/tty1.conf
#=========================================================
cat <<EOF>> .profile
if [ ! -e '/tmp/.X0-lock' ] ; then
  echo -n 'Start X on login...'
  startx
else
  echo 'X is alredy running...'
fi
EOF

PROVISION_SELENIUM='#{provision_selenium}'
if [ "$PROVISION_SELENIUM" != '' ] ; then
  #================-==========================================
  echo 'Updating Selenium app stack...'
  #===========================================================

  FIREFOX_VERSION='#{firefox_version}'
  if [ "$FIREFOX_VERSION" = '' ]
  then
    #=========================================================
    echo 'Install the latest Firefox'
    #=========================================================
    sudo apt-get -qqy install firefox
  else
    #=========================================================
    echo "Install the Firefox version ${FIREFOX_VERSION}"
    #=========================================================
    URL="https://ftp.mozilla.org/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2"
    FIREFOX_ARCHIVE="/var/tmp/firefox-${FIREFOX_VERSION}.tar.bz2"
    wget -O $FIREFOX_ARCHIVE -nv $URL
    pushd /home/vagrant
    mkdir -p firefox
    tar xjf $FIREFOX_ARCHIVE
    sudo cp -R firefox /usr/lib
    popd
  fi

  SELENIUM_VERSION='#{selenium_version}'
  if [ "$SELENIUM_VERSION" = '' ]
  then
    #=========================================================
    echo "Download latest Selenium Server..."
    #=========================================================
    SELENIUM_RELEASE=$(curl -# "https://selenium-release.storage.googleapis.com/" | perl -n -e'/.*<Key>([^>]+selenium-server-standalone[^<]+)/ && print $1')
  else
    #=========================================================
    echo "Download Selenium version ${SELENIUM_VERSION} ..."
    #=========================================================
    RELEASE_REGEX=$(echo "/.*<Key>(${SELENIUM_VERSION}[^>]+selenium-server-standalone[^<]+)/&& print \\$1")
    SELENIUM_RELEASE=$(curl -# "https://selenium-release.storage.googleapis.com/" | perl -n -e"${RELEASE_REGEX}")
  fi
  export URL="https://selenium-release.storage.googleapis.com/${SELENIUM_RELEASE}"
  #=========================================================
  echo "Downloading Selenium from \\"${URL}\\""
  #=========================================================
  wget -nv -O selenium-server-standalone.jar $URL
  chown vagrant:vagrant selenium-server-standalone.jar

  CHROME_VERSION='#{chrome_version}'
  if [ "$CHROME_VERSION" = '' ]
    then
    #=========================================================
    echo "Download the latest Chrome..."
    #=========================================================
    # http://askubuntu.com/questions/79280/how-to-install-chrome-browser-properly-via-command-line
    wget -nv "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
    sudo apt-get install -qqy libxss1 libappindicator1 libindicator7
    sudo dpkg -i google-chrome-stable_current_amd64.deb
    sudo rm google-chrome-stable_current_amd64.deb
    sudo apt-get install -qqy -f google-chrome-stable
  else
    sudo apt-get remove -qqy -f google-chrome-stable
    echo "Installing Chrome version ${CHROME_VERSION}"
    export URL="http://www.slimjetbrowser.com/chrome/lnx/chrome64_${CHROME_VERSION}.deb"
    echo "Downloading Chrome from ${URL}"
    wget -nv $URL
    sudo apt-get install -qqy libxss1 libappindicator1 libindicator7
    sudo dpkg -i "chrome64_${CHROME_VERSION}.deb"
    sudo rm "chrome64_${CHROME_VERSION}.deb"
  fi

  CHROMEDRIVER_VERSION='#{chromedriver_version}'
  if [ "$CHROMEDRIVER_VERSION" = '' ]
  then
    #=========================================================
    echo 'Download latest Chrome Driver...'
    #=========================================================
    CHROMEDRIVER_VERSION=$(curl -# "http://chromedriver.storage.googleapis.com/LATEST_RELEASE")
  else
    echo "Download Chrome Driver version ${CHROMEDRIVER_VERSION} ..."
  fi
  wget -O "/var/tmp/chromedriver_linux64.zip" -nv "http://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip"
  pushd /home/vagrant
  unzip -o "/var/tmp/chromedriver_linux64.zip"
  ls
  chown vagrant:vagrant chromedriver
  popd
fi

#=========================================================
echo -n 'Set screen resolution'
#=========================================================

cat <<EOF>> /home/vagrant/.fluxbox/startup
xrandr -s 1280x800
EOF

#=========================================================
echo -n 'Install tmux scripts'
#=========================================================
cat <<EOF> tmux.sh
#!/bin/sh
tmux start-server

tmux new-session -d -s chrome-driver
tmux send-keys -t chrome-driver:0 'export DISPLAY=:0' C-m
tmux send-keys -t chrome-driver:0 './chromedriver' C-m

tmux new-session -d -s selenium
tmux send-keys -t selenium:0 'export DISPLAY=:0' C-m

# NOTE options for java runtime.
tmux send-keys -t selenium:0 'java -Xmn512M -Xms1G -Xmx1G -jar selenium-server-standalone.jar' C-m
tmux send-keys -t selenium:0 'for cnt in {0..10}; do wget -O- http://127.0.0.1:4444/wd/hub; sleep 120; done' C-m

EOF
chmod +x tmux.sh
chown vagrant:vagrant tmux.sh

#=========================================================
echo -n 'Install startup scripts'
#=========================================================
cat <<EOF> /etc/X11/Xsession.d/9999-common_start
#!/bin/sh
/home/vagrant/tmux.sh &
xterm -fa fixed &
EOF
chmod +x /etc/X11/Xsession.d/9999-common_start

#=========================================================
echo -n 'Add host alias'
#=========================================================
echo '192.168.33.1 host'| tee /etc/hosts

#=========================================================
echo 'Reboot the VM'
#=========================================================
sudo reboot

  END_OF_PROVISION

  config.vm.provider :virtualbox do |v|
    v.gui = true
    v.name = 'Selenium Fluxbox'
    v.customize ['modifyvm', :id, '--memory', box_memory ]
    v.customize ['modifyvm', :id, '--vram', '16']
    v.customize ['modifyvm', :id, '--clipboard', 'bidirectional']
    v.customize ['setextradata', 'global', 'GUI/MaxGuestResolution', 'any']
    v.customize ['setextradata', :id, 'CustomVideoMode1', '1280x900x32']
    # supported by fluxbox
  end
end

надеюсь кому то может пригодиться. Улучшения, рекомендации - приветствуются


  • 0

#6 lexis2001

lexis2001

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Алексей Романов

Отправлено 12 октября 2016 - 09:51

Спасибо за скрипт. Было бы ещё хорошо если бы кто-то поделился опытом как грамотно использовать связку xvfb-chrome-jenkins. Возможно хром не стартует потому что параллельно несколько джоб запускается и виртуальный дисплей разрывается на части между ними. Может быть я не правильно организовал headless режим. Может быть там какие-то нюансы типа race condition. Поделитесь своими скриптами у кого есть :)

 

Сейчас так:

xvfb-run -a --server-args="-screen 0, 1280x1024x24"
 

На одном и том же DISPLAY и на одном и том же SCREEN нельзя запускать параллельно несколько GUI приложений если я правильно понял. Возможно потому хром иногда и висит на запуске. Он не знает какие иксы использовать.


  • 0

#7 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 12 октября 2016 - 13:15

есть VagrantFile для chef + chrome + xvfb (и vnc - там вперемежку) (но вместо "казенного" xfvbrun нап. свои **работающие*** ini.d и shell скрипты --

https://github.com/s...elenium_vagrant - написано неск.  лет назад то есть очень давно.

нак найти DISPLAY там кстати есть

 

если нитересно задавайте вопросы


  • 0

#8 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 12 октября 2016 - 14:27

есть проект Vagrant + chef + chrome + xvfb (и vnc - там все вперемежку) - но
вместо "казенного" xfvbrun нап. свои **работающие*** ini.d и shell скрипты --

https://github.com/s...elenium_vagrant - написано неск. лет назад то есть очень очень давно.
https://github.com/s...r/utils/node.sh
нак найти DISPLAY там кстати есть (выдрано из одного из templates/default:

# This code detects the already running instances. Only one selenium node can run listening to a given port
echo "Checking if there is already Selenium process listening to ${NODE_PORT} and terminating"
netstat -npl | grep $NODE_PORT | awk '{print $7}'| grep '/java'
RUNNING_PID=$(netstat -npl | grep $NODE_PORT | awk '{print $7}'| grep '/java'|head -1 | sed 's/\/.*$//')
if [ "$RUNNING_PID" != "" ] ; then
echo killing java $RUNNING_PID
ps -ocomm -oargs -opid -p $RUNNING_PID
# sending HUP
kill -HUP $RUNNING_PID
sleep 10
kill $RUNNING_PID

echo "Done."
fi


echo  "Detect already running Xvfb ${DISPLAY_PORT}"
RUNNING_PID2=$(netstat -npl | grep STREAM  |grep $DISPLAY_PORT| awk '{print $9}'|head -1 | sed 's/\/.*$//')
if [ "$RUNNING_PID2" != "" ] ; then
ps -ocomm -oargs -opid -p $RUNNING_PID2
echo killing Xvfb $RUNNING_PID2
# NOTE change of signal sent to Xvfb
kill $RUNNING_PID2
fi
export DISPLAY=:$DISPLAY_PORT
# TODO : specify geometry of the display 1280x1024x24
Xvfb $DISPLAY -ac >/dev/null 2>&1 &
fi

если интересно спрашивайте


  • 0



Темы с аналогичным тегами chromedriver, chrome, jenkins, fe, automation

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных