当前位置: 首页 > 知识库问答 >
问题:

运行使用远程webdriver并连接到selenium集线器和节点的测试失败

慎弘化
2023-03-14

我正在尝试运行一个使用webdriver的python脚本。在ubuntu服务器上使用CHROME浏览器进行远程访问。我在服务器中设置了一个selenium网格(一个集线器和一个节点),并使用systemd服务文件将集线器和节点以及xvfb作为后台进程运行。但是,运行python文件给了我一个:selenium。常见的例外情况。WebDriverException:

  • Selenium服务器版本:3.4
  • Chromedriver版本:2.29(已在/usr/local/bin中-运行此版本没有问题)
  • Geckodriver版本:0.15.0(我使用的是chrome浏览器,但把它放在这里只是为了备不时之需。
  • 我已经在导出xvfb的显示:5
  • 检查netstat-tln显示集线器和节点正在端口4444和5555上运行
  • 我正在通过fabric自动化数字海洋服务器的设置。那么如何运行python脚本呢?我将代码放在digital ocean服务器中,并在那里运行代码
  • 如果您需要更多详细信息,请告诉我,但当我检查节点的日志时,我根本看不到在节点中创建会话的任何消息

我一直在制造新的水滴,花了无数个小时调试出了什么问题。

[Unit]
Description=X Virtual Frame Buffer Service
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :5 -screen 0 1024x768x8

[Install]
WantedBy=multi-user.target
[Unit]
Description=Selenium Hub
After=syslog.target network.target


[Service]
User=root
Type=simple
Environment=DISPLAY=:5
ExecStart=/usr/bin/java -Dwebdriver.gecko.driver=/usr/local/bin/geckodriver -Dwebdriver.chrome.bin=/usr/bin/google-chrome -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver -jar /usr/local/bin/selenium-server-standalone.jar -role hub -log /var/log/selenium-hub/output.log


[Install] 
WantedBy=multi-user.target
....

[Service]
User=root
Type=simple
Environment=DISPLAY=:5
ExecStart=/usr/bin/java -Dwebdriver.gecko.driver=/usr/local/bin/geckodriver -Dwebdriver.chrome.bin=/usr/bin/google-chrome -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver -jar /usr/local/bin/selenium-server-standalone.jar -role node -hub http://localhost:4444/grid/register -log /var/log/selenium-node/output.log
selenium.common.exceptions.WebDriverException: Message: None
Stacktrace:
     at java.util.HashMap.putMapEntries (HashMap.java:500)
     at java.util.HashMap.putAll (HashMap.java:784)
     at org.openqa.selenium.remote.DesiredCapabilities.<init> (DesiredCapabilities.java:55)
     at org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:104)
....
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:672
at org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run (QueuedThreadPool.java:590
at java.lang.Thread.run (Thread.java:745)
def create_driver():
    command_executor = 'http://localhost:4444/wd/hub'  # default
    capabilities = {
        'browserName': 'chrome',
        'version': '',
        'platform': 'ANY',
        'javascriptEnabled': 'True',
        # 'acceptSslCerts': 'False',
        # 'unexpectedAlertBehaviour': 'True',
        'chromeOptions': {
            'args': [
                '--disable-extensions',
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--verbose',
                '--log-path=/var/log/chromedriver-full.log',
                '--disable-impl-side-painting',
                '--memory-model=high',
                '--disk-cache-size=500000000',
                '--allow-running-insecure-content',
                '--ignore-certificate-errors',
                '--ignore-urlfetcher-cert-requests',
                '--disable-gpu',
                '--disk-cache-dir=null',
            ],
            # 'extensions': [],
            # 'binary': '/usr/bin/chromium-browser',
            # 'minidumpPath': '/root/'
        },
        'loggingPrefs': {'driver': 'ALL', 'server': 'ALL', 'browser': 'ALL', 'performance': 'ALL'}
    }
    driver = webdriver.Remote(desired_capabilities=capabilities, command_executor=command_executor)
    time.sleep(5)  # Let the user actually see something!
    driver.implicitly_wait(60)
    return driver


def main():
    print("Running remote web driver test")
    driver = create_driver()
    driver.get("https://www.google.com.ph")
    print(driver.current_url)
    screenshot = driver.save_screenshot('/root/test.png')
    print(screenshot)
    driver.quit()
    display.stop()
    print("Success test on remote web driver")

main()

共有1个答案

穆城
2023-03-14

我在测试硒附加物时也犯了同样的错误...

我认为python selenium的最新版本(3.4.1)在与selenium网格(集线器节点)交互时有一个bug,而在独立模式下运行良好。

我使用较旧的python selenium解决了这个问题:

pip show selenium | grep -i version
Version: 2.48.0

如果安装了pip,可以先卸载它:

pip uninstall selenium

然后尝试不同的版本,我成功地尝试了APT提供的相同版本:

pip install selenium==2.48.0

也许一些后来的版本正在工作,但没有尝试。

再见

 类似资料:
  • 我正在尝试将两台vm机器相互连接(在win10上同时运行)。我下载了java JDK 15和 selenium-server-4.0.0-alpha-6.jar 我正在运行我的集线器,复制我在那里得到的TCP URL(tcp://hub:4442/3)到我的第二台机器。 但在运行node命令后,我收到了以下消息: 开始节点ID X的注册过程 一切都悬而未决。。。我试过使用Test NetConne

  • 问题内容: 我当前的设置是我有一个seleniumRC作为Windows计算机上的集线器运行(假设计算机名称为machine.name.com)。我已经使用以下命令启动它 我有一个selenium节点运行在注册到上述节点的同一台计算机上。我已经使用以下命令来启动节点 该节点已成功注册,我也可以对该节点进行测试。 现在,我有另一台机器(一台LINUX机器- 假设此机器的IP地址为10.123.123

  • 我正在研究一套Selenium WebDriver(不是Selenium RC,也不使用Selenium-Server)测试,这些测试通过对mstest的命令行调用执行。我将它们分解为我们计划测试的每个浏览器的测试类(目前是Chrome、Firefox和IE9),每个测试类都有一个启动方法,它登录到测试中的系统,然后执行请求的测试,还有一个拆分方法,它使用webdriver.quit()关闭浏览器

  • 我正在使用maven运行spring集成测试。我试图在启用调试端口的情况下运行它,这样我就可以从IntelliJ idea连接到它。 下面的命令行在过去工作过。它用于允许surefire启动初始化,然后等待连接到端口8000,然后继续测试: 然而,这给了我以下例外: [错误]在当前项目和插件组[com.zillow,org.apache.maven.plugins,org.codehaus.moj

  • 我们在2000年左右有一组自动化测试用例,我们需要每天在每一个新的构建上运行它们。目前在一台机器上完成测试需要4个小时。为了减少这一点,我们计划通过启动多个相同类型的浏览器,在同一台机器上分批运行测试(每批500个)。假设每个测试套件有4个firefox浏览器会话。所以它可以在1小时内完成。使用selenium webdriver和TestNG可以实现吗?请建议。

  • 我在试着运行硒网格, 详细信息:win 7,selenium 2.4.5,selenium-server-独立-2.46.0,java 8,我得到一个错误: 无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败。生成信息:版本:'2.45。0',修订版:'5017cb8e7ca8e37638dc3091b2440b90a1d8686f',时间:'2015-02-27 09:10:26'系