LoginSignup
0

More than 1 year has passed since last update.

Selenoidでorg.openqa.selenium.InvalidArgumentException: Requested environment is not availableエラーがでる

Posted at

はじめに

Gauge+Kotlin+Selenide+SelenoidでE2Eの環境を作ろうとしてつまづいたエラーをまとめます
環境構築などに関しては以下の記事を参考にしています

問題

環境構築を行って、Setupを書いたあとに試しにmvn testを実行したところSetupでエラーが発生しました

/usr/local/bin/gauge run --machine-readable --hide-suggestion --simple-console /home/watanabejin/workspace/gauge-e2e/specs/example.spec:3
Testing started at 14:30 ...
exit status 1
Installed version of gauge-java (0.9.1) does not match with dependency gauge-java () specified in pom.xml file
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Failed: Before Suite
Message: org.openqa.selenium.InvalidArgumentException: Requested environment is not available
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'watanabejin-Latitude-3520', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.14.0-1057-oem', java.version: '18'
Driver info: driver.version: RemoteWebDriver
remote stacktrace: 
Stack Trace:
java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144)
Setup.beforeSuit(Setup.kt:17)
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
java.base/java.lang.reflect.Method.invoke(Method.java:577)
com.thoughtworks.gauge.execution.MethodExecutor.execute(MethodExecutor.java:28)
com.thoughtworks.gauge.execution.HooksExecutor$TaggedHookExecutor.executeHook(HooksExecutor.java:92)
com.thoughtworks.gauge.execution.HooksExecutor$TaggedHookExecutor.execute(HooksExecutor.java:78)
com.thoughtworks.gauge.execution.HooksExecutor.execute(HooksExecutor.java:35)
com.thoughtworks.gauge.processor.MethodExecutionMessageProcessor.executeHooks(MethodExecutionMessageProcessor.java:55)
com.thoughtworks.gauge.processor.SuiteExecutionStartingProcessor.process(SuiteExecutionStartingProcessor.java:26)
com.thoughtworks.gauge.RunnerServiceHandler.lambda$startExecution$1(RunnerServiceHandler.java:62)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
java.base/java.lang.Thread.run(Thread.java:833)

Successfully generated html-report to => /home/watanabejin/workspace/gauge-e2e/reports/html-report/index.html

Specifications:	0 executed	0 passed	0 failed	0 skipped
Scenarios:	0 executed	0 passed	0 failed	0 skipped

Total time taken: 740ms

プロセスは終了コード 1 で終了しました

どうやら環境変数がおかしいと怒られているようです

以下がSetupを行っているコードです

Setup.kt
import com.codeborne.selenide.Configuration
import com.codeborne.selenide.WebDriverRunner
import com.thoughtworks.gauge.BeforeSuite
import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver
import java.net.URI

class Setup {
    @BeforeSuite
    fun beforeSuit() {
        val capabilities = DesiredCapabilities();
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("browserVersion", "92.0");
        capabilities.setCapability("enableLog", true);
        capabilities.setCapability("enableVNC", true);
        capabilities.setCapability("enableVideo", true);
        val driver = RemoteWebDriver(
            URI.create("http://localhost:4445/wd/hub").toURL(),
            capabilities
        );
        WebDriverRunner.setWebDriver(driver);

        Configuration.fastSetValue = true;
    }
}

解決方法

まずSelenoidコンテナで読み込まれている設定ファイルを確認しました

/selenoid/config/browser.json
{
  "chrome": {
    "default": "90.0",
    "versions": {
      "90.0": {
        "image": "selenoid/vnc_chrome:90.0",
        "port": "4444",
        "tmpfs": {"/tmp": "size=512m", "/var": "size=128m"},
        "path": "/"
      }
    }
  },
}

するとVersions90.0しか設定されていませんでした
なので、SetupbrowserVersion90.0に変更したところ動くようになりました

Setup.kt
import com.codeborne.selenide.Configuration
import com.codeborne.selenide.WebDriverRunner
import com.thoughtworks.gauge.BeforeSuite
import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver
import java.net.URI

class Setup {
    @BeforeSuite
    fun beforeSuit() {
        val capabilities = DesiredCapabilities();
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("browserVersion", "90.0"); // 変更
        capabilities.setCapability("enableLog", true);
        capabilities.setCapability("enableVNC", true);
        capabilities.setCapability("enableVideo", true);
        val driver = RemoteWebDriver(
            URI.create("http://localhost:4445/wd/hub").toURL(),
            capabilities
        );
        WebDriverRunner.setWebDriver(driver);

        Configuration.fastSetValue = true;
    }
}

おわりに

E2Eの経験がまったくないので、最後までやれるか不安です

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0