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

Selenium WebDriver: полное руководство
онлайн, начало 19 октября
Логи как инструмент тестировщика
онлайн, начало 22 октября
Школа для начинающих тестировщиков
онлайн, начало 22 октября
Тестирование REST API
онлайн, начало 22 октября
Фотография

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
  • PipPip
  • 75 сообщений
  • ФИО:кузьмин сергей

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

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


  • 0

#3 lexis2001

lexis2001

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

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

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

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


  • 0

#4 sergueik

sergueik

    Активный участник

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

Отправлено 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
  • PipPip
  • 75 сообщений
  • ФИО:кузьмин сергей

Отправлено 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
  • PipPip
  • 75 сообщений
  • ФИО:кузьмин сергей

Отправлено 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
  • PipPip
  • 75 сообщений
  • ФИО:кузьмин сергей

Отправлено 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


Selenium 2.0: стартовый уровень
онлайн, начало 9 ноября
Программирование на Java для тестировщиков
онлайн, начало 16 ноября
Автоматизация функционального тестирования
онлайн, начало 9 ноября
Selenium WebDriver: полное руководство
онлайн, начало 19 октября




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

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

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

Яндекс.Метрика
Реклама на портале