docker创建的appium服务,怎么注册到selenium grid上?

目前公司只批下来一台机器,所以分布式需要的主从都在一台服务器,就用docker创建了4个appium服务,发现使用docker-compose启动的grid和4个appium都能正常启动,但是appium注册不上grid服务上,docker-compose.yml内容如下
image
麻烦老师们帮忙查看下。

appium官方提供的两个方法


适合本地安装的appium不适合docker创建的appium容器。

在appium容器里运行appium --nodeconfig appium_login.json报这个错误,


下图为json内容
image

docker-compose创建的服务
appium报:
image
yml文件为


hub服务正常启动了

使用自己的电脑上的appium注册到grid上,也不行
image

yml文件换成yaml文件,启动后appium报的内容
image
和正常的启动没有什么区别,
grid上也没有节点上报

没看到你说的4个服务 你配置文件里只有一个

你这个错误是因为本来里面就启动了一个 你再启动才有问题的吧

没有截图全部,其他的只有端口不一样

是的,目前想不到怎么在appium容器启动后,能注册到grid上,最开始的想法是一台win电脑上连接5台手机,mac电脑连接5台iOS手机

Hub地址不对 不能用127的地址 要用hub容器地址 127在容器内指向的7是容器自己 不是你的主机

yaml配置文件里的hub地址改成grid容器的地址吗?
容器不是只有启动了才知道地址吗?可以提前设置容器的IP地址?

是的 你试试 我看着像是这个问题 我在路上没法测试

好的,谢谢校长

已经验证,docker-compose和设置的地址没有关系,我把 - HUB_PORT_4444_TCP_URL=http://192.168.200.140:4444/wd/hub这一行在appium1去掉了,在appium设置的上次的IP,appium3不变,还是一个都没有注册上
image
公司一共给了三台电脑,一台mac,两台win,我的想法是一台win链接5个安卓手机 ,一个mac链接5台iOS手机,一台win做grid,同时运行脚本。
目的是分布式执行用例。
使用docker-compose是我想一台电脑可以启动多个appium链接指定的一个手机。或者老师有其他的分布式已经能使用的想法,也可以说下。
目前发现的问题是
1、docker创建的grid容器,任何办法都注册不上,包括浏览器节点
2、使用jar包注册的grid4,浏览器节点能注册成功,但是appium怎么都注册不上
3、验证原因发现appium -nodeconfig 后面跟什么,实际上都没有运行,只是启动了appium,。没有执行后面的json配置文件。
image
希望解决的问题
1、docker创建的appium容器,能注册到grid3或者4上吗?怎么注册??
2、使用电脑本地安装的appium怎么能注册到grid4上?目前看appium后面的命令不可用

目前已经决绝了appium启动的问题了,现在是注册不上,
image
百度暂时没有找到有用的资料

你把配置贴上来 别截图 我本地看看

appium注册到gird问题已经解决,原因是我使用的grid4,和grid3差距很大,我把版本改成grid3,重新配置后,能注册成功


但是现在有个新的问题,我把代码里的初始化地址改成grid的地址后,报:
启动安卓设设备
启动
Traceback (most recent call last):
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/BuzzCast_app/startup.py”, line 16, in
startup()
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/BuzzCast_app/startup.py”, line 7, in startup
from BuzzCast_app.pom import appd
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/BuzzCast_app/pom/init.py”, line 7, in
appd = App_Android(“android”)
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/apium/core/app_initialize.py”, line 22, in init
self.__driver = webdriver.Remote(“http://192.168.200.140:4444/wd/hub”, desired_caps)
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/venv/lib/python3.8/site-packages/appium/webdriver/webdriver.py”, line 273, in init
super().init(
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py”, line 266, in init
self.start_session(capabilities, browser_profile)
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/venv/lib/python3.8/site-packages/appium/webdriver/webdriver.py”, line 364, in start_session
response = self.execute(RemoteCommand.NEW_SESSION, parameters)
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py”, line 418, in execute
self.error_handler.check_response(response)
File “/Users/changxingang/PycharmProjects/FaceCast_app_auto/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py”, line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: None
Stacktrace:
at java.util.HashMap.putMapEntries (HashMap.java:497)
at java.util.HashMap.putAll (HashMap.java:781)
at org.openqa.selenium.remote.DesiredCapabilities. (DesiredCapabilities.java:55)
at org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:104)
at org.openqa.grid.web.servlet.DriverServlet.process (DriverServlet.java:83)
at org.openqa.grid.web.servlet.DriverServlet.doPost (DriverServlet.java:67)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:790)
at org.seleniumhq.jetty9.servlet.ServletHolder.handle (ServletHolder.java:841)
at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle (ServletHandler.java:543)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188)
at org.seleniumhq.jetty9.server.session.SessionHandler.doHandle (SessionHandler.java:1584)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle (ContextHandler.java:1228)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:168)
at org.seleniumhq.jetty9.servlet.ServletHandler.doScope (ServletHandler.java:481)
at org.seleniumhq.jetty9.server.session.SessionHandler.doScope (SessionHandler.java:1553)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:166)
at org.seleniumhq.jetty9.server.handler.ContextHandler.doScope (ContextHandler.java:1130)
at org.seleniumhq.jetty9.server.handler.ScopedHandler.handle (ScopedHandler.java:141)
at org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132)
at org.seleniumhq.jetty9.server.Server.handle (Server.java:564)
at org.seleniumhq.jetty9.server.HttpChannel.handle (HttpChannel.java:320)
at org.seleniumhq.jetty9.server.HttpConnection.onFillable (HttpConnection.java:251)
at org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded (AbstractConnection.java:279)
at org.seleniumhq.jetty9.io.FillInterest.fillable (FillInterest.java:112)
at org.seleniumhq.jetty9.io.ChannelEndPoint$2.run (ChannelEndPoint.java:124)
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:834)

进程已结束,退出代码为 1
百度没有找到有用的信息,下面是代码:


image
访问http://192.168.200.140:4444/wd/hub,响应数据为下图

两个appium的地址没有任何链接信息,就好像使用http://192.168.200.140:4444/wd/hub,访问不了注册的appium节点一样

麻烦老师看下问题

执行用例调用设备的时候,填写的platformName和version都跟对应节点配置文件中声明的保持一致试一下,包括大小写都要一致

都改成一样的了 ,还是报这个错误




看看你grid容器日志呢,访问过来报什么错了