• selenium遇到的问题记录


    1。在Linux上执行的用例脚本,偶尔会停止,但是脚本日志本身没有捕获到异常,

    geckodriver的相关日志:

    2.脚本、Firefox等进程还在,但是没有往下执行了。

    3.脚本日志记录了最后一个正常执行的Firefox、geckodriver的pid,这些pid是倒数第二个用例的所起的pid。在自动化测试后台记录的最后一个用例,没有开始插入请求信息。所以可能是启动Firefox了,但是Firefox没响应,需要进一步定位。

    3.尝试更新selenium、Firefox、geckodriver版本。

    原来的版本信息:

    selenium:3.12  (import selenium;help(selenium))

    geckodriver:0.20.1

    Firefox:56.0.2  (firefox --version)

    更新后的版本信息:

    selenium:3.14

    geckodriver:0.20.1

    Firefox:60.0.1

     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      今天又出现这个问题了,但是看geckodriver的日志,发现了以前未出现过的错误。

    1538259743546    Marionette    FATAL    Remote protocol server failed to start: Error: Could not bind to port 39668 (NS_ERROR_SOCKET_ADDRESS_IN_USE) (chrome://marionette/content/server.js:87:17) JS Stack trace: set acceptConnections@server.js:87:17
    start@server.js:116:5
    init/<@marionette.js:537:9
    1538259743558    addons.xpi    WARN    Exception running bootstrap method shutdown on activity-stream@mozilla.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIObserverService.removeObserver]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: resource://activity-stream/lib/SnippetsFeed.jsm :: uninit :: line 185"  data: no] Stack trace: uninit()@resource://activity-stream/lib/SnippetsFeed.jsm:185
    onAction()@resource://activity-stream/lib/SnippetsFeed.jsm:201
    _middleware/</<()@resource://activity-stream/lib/Store.jsm:49
    Store/this[method]()@resource://activity-stream/lib/Store.jsm:28
    uninit()@resource://activity-stream/lib/Store.jsm:151
    uninit()@resource://activity-stream/lib/ActivityStream.jsm:300
    uninit()@resource://gre/modules/addons/XPIProvider.jsm -> jar:file:///usr/local/firefox/browser/features/activity-stream@mozilla.org.xpi!/bootstrap.js:73
    shutdown()@resource://gre/modules/addons/XPIProvider.jsm -> jar:file:///usr/local/firefox/browser/features/activity-stream@mozilla.org.xpi!/bootstrap.js:169
    callBootstrapMethod()@resource://gre/modules/addons/XPIProvider.jsm:4436
    observe()@resource://gre/modules/addons/XPIProvider.jsm:2287
    init/<()@jar:file:///usr/local/firefox/omni.ja!/components/marionette.js:542
    JavaScript error: jar:file:///usr/local/firefox/omni.ja!/components/marionette.js, line 547: TypeError: this.server is null
    JavaScript error: resource://gre/modules/ProfileAge.jsm, line 174: Error: Unable to fetch oldest profile entry: Unix error 2 during operation lstat on file /tmp/rust_mozprofile.90aSkqvMJnop (No such file or directory)
    *** UTM:SVC TimerManager:registerTimer called after profile-before-change notification. Ignoring timer registration for id: telemetry_modules_ping
    提示Marionette绑定不了39668端口。然后查了下这个端口的信息,local Address和foreign address都用了一样的端口。local Address是geckodriver绑定的端口,
    foreign Address是Marionette绑定的端口。
    所以暂时把今天脚本中断的原因定为,geckodriver和Marionette的端口冲突了?

       

    措施:1.也没找到对应的解决方法,先把geckodriver更新为0.22.0,Firefox更新为62.0

             2.或者后续可以加个shell脚本之类的,监控如果Xvfb、geckodriver的进程时间超过10mins没有更新,则kill掉相应的进程,然后继续执行被终止及之后的用例?

     

     还可以怎么定位问题?

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    补充:之前的部署步骤

    • 安装pyvirtualdisplay
    • pip install pyvirtualdisplay
    • 安装Xvfb(作为后端)
    • yum install xorg-x11-server-Xvfb
    • 安装Firefox
    • cd /usr/local
    • wget https://ftp.mozilla.org/pub/firefox/releases/56.0.2/linux-x86_64/en-US/firefox-56.0.2.tar.bz2
    • 解压geckodriver-v0.19.1-linux64.tar.gz
    • tar xvzf geckodriver-*.tar.gz
    • 在环境变量目录/usr/bin/中添加geckodriver的硬链接
    • ln -s /usr/local/geckodriver /usr/bin/geckodriver

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    后续:原来的脚本用例设计其实有问题,每个用例都重新启动一遍浏览器,上百个用例频繁打开启动,应该就是这样导致偶尔启动不了。现在改成把启动浏览器的操作封装成一个方法,每次执行脚本就只调用一遍那个方法,即执行完所有用例再关闭浏览器和Xvfb。(自己瞎折腾的,只能慢慢优化了)

    参考:https://blog.csdn.net/yinshuilan/article/details/79730239

    关于geckodriver和Marionette:http://toolsqa.com/selenium-webdriver/how-to-use-geckodriver/

                                                      http://t-coes.com/blog/2017/08/14/launch-firefox-browser-selenium-3-0-geckodriver/

  • 相关阅读:
    winhex教程 转 武胜
    winhex 16.6 武胜
    深拷贝 武胜
    多线程更新UI 武胜
    symfony学习笔记
    c++ CTime COleTime的一些操作技巧
    php mysql apache 配置笔记
    查看Apache并发请求数及其TCP连接状态(转)
    MFC 添加lib引用笔记
    点分主机名
  • 原文地址:https://www.cnblogs.com/minerrr/p/9644788.html
Copyright © 2020-2023  润新知