Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lambdatest plugin - Mobile iOS Safari - Handshake response does not match any supported protocol #3287

Closed
mihai60beans opened this issue Oct 16, 2023 · 6 comments

Comments

@mihai60beans
Copy link

mihai60beans commented Oct 16, 2023

What happened?

I cannot run tests on LambdaTest using latest 4.x serenity versions. I could do that in the serenity 3.x versions.

The error is:

net.thucydides.core.webdriver.DriverConfigurationError: Could not instantiate class org.openqa.selenium.remote.RemoteWebDriver
        at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:181)
        at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:169)
        at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:120)
        at net.thucydides.core.webdriver.WebDriverFacade.get(WebDriverFacade.java:209)
        at tests.A_LambdaTest.loginTest(A_LambdaTest.java:11)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at net.serenitybdd.junit.runners.SerenityStatement.evaluate(SerenityStatement.java:33)
        at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
        at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
        at net.serenitybdd.junit.runners.SerenityRunner.performRunChild(SerenityRunner.java:445)
        at net.serenitybdd.junit.runners.SerenityRunner.runChild(SerenityRunner.java:419)
        at net.serenitybdd.junit.runners.SerenityRunner.runChild(SerenityRunner.java:58)
        at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
        at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
        at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
        at net.serenitybdd.junit.runners.SerenityRunner.run(SerenityRunner.java:229)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
        at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: net.thucydides.core.webdriver.DriverConfigurationError: WebDriver was unable to create a new instance of type class org.openqa.selenium.remote.RemoteWebDriver
WebDriver reported the following message: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. 

        at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:152)
        at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:178)
        ... 34 more
Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. 


Build info: version: '4.14.1', revision: '03f8ede370'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '12.3.1', java.version: '21'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Command: [null, newSession {capabilities=[Capabilities {LT:Options: {accessKey: .......<removed>........., build: myBuild, deviceName: iPhone 12, isRealMobile: false, name: myName, project: myProject, projectName: Serenity BDD Test Suite, selenium_version: 4.0.0, tags: [feature:tests/A_LambdaTest], user: , username: <removed>, w3c: true}, browserName: Safari, browserVersion: latest, build: Serenity BDD Test Suite - 2..., name: A_LambdaTest - Login test, platformName: IOS, projectName: Serenity BDD Test Suite}]}]
Capabilities {LT:Options: {accessKey: ....<removed>..., build: myBuild, deviceName: iPhone 12, isRealMobile: false, name: myName, project: myProject, projectName: Serenity BDD Test Suite, selenium_version: 4.0.0, tags: [feature:tests/A_LambdaTest], user: , username: <removed>, w3c: true}, browserName: Safari, browserVersion: latest, build: Serenity BDD Test Suite - 2..., name: A_LambdaTest - Login test, platformName: IOS, projectName: Serenity BDD Test Suite}
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:620)
        at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:163)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:143)
        at net.serenitybdd.core.webdriver.driverproviders.RemoteDriverProvider.newInstance(RemoteDriverProvider.java:82)
        at net.thucydides.core.webdriver.WebDriverFactory.createWebDriver(WebDriverFactory.java:164)
        at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:142)
        ... 35 more
Caused by: java.lang.IllegalArgumentException: Illegal key values seen in w3c capabilities: [build, name, projectName]
        at org.openqa.selenium.remote.NewSessionPayload.lambda$validate$4(NewSessionPayload.java:184)
        at java.base/java.util.stream.ReferencePipeline$15$1.accept(ReferencePipeline.java:540)
        at java.base/java.util.stream.ReferencePipeline$15$1.accept(ReferencePipeline.java:541)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$15$1.accept(ReferencePipeline.java:541)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at org.openqa.selenium.remote.NewSessionPayload.validate(NewSessionPayload.java:188)
        at org.openqa.selenium.remote.NewSessionPayload.<init>(NewSessionPayload.java:91)
        at org.openqa.selenium.remote.NewSessionPayload.create(NewSessionPayload.java:127)
        at org.openqa.selenium.remote.NewSessionPayload.create(NewSessionPayload.java:111)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:67)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)
        at org.openqa.selenium.remote.TracedCommandExecutor.execute(TracedCommandExecutor.java:51)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602)
        ... 41 more




What did you expect to happen?

I can run tests on LambdaTest for mobile iOS Safari using serenity latest version.

Serenity BDD version

4.0.15

JDK version

21

Execution environment

MacOS or Windows

How to reproduce the bug.

Using Java Junit Serenity and LambdaTest plugin

pom.xml

<serenity.version>4.0.15</serenity.version>
<selenium.version>4.14.1</selenium.version>
<selenium.remote.version>4.13.0</selenium.remote.version>

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>${selenium.remote.version}</version>
        </dependency>
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-core</artifactId>
            <version>${serenity.version}</version>
        </dependency>
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-junit</artifactId>
            <version>${serenity.version}</version>
        </dependency>
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-shutterbug1x</artifactId>
            <version>${serenity.version}</version>
        </dependency>
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-model</artifactId>
            <version>${serenity.version}</version>
        </dependency>
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-lambdatest</artifactId>
            <version>${serenity.version}</version>
        </dependency>

serenity.conf

environments {
    lambdatest_safari_mobile {
        webdriver {
            driver = remote
            remote.url = "https://<myUser>:<myAccessKey>@hub.lambdatest.com/wd/hub"
            capabilities {
                browserName = "Safari"
                browserVersion = "latest"
                platformName = "ios"
                "LT:Options" {
		    deviceName = "iPhone 12"
                    isRealMobile = "false"
                }
            }
        }
    }

Command to run the tests:
mvn clean test -Dtest=A_LambdaTest -Denvironment=lambdatest_safari_mobile

How can we make it happen?

Add it to the Serenity BDD backlog and wait for a volunteer to pick it up

@wakaleo
Copy link
Member

wakaleo commented Oct 16, 2023

"Illegal key values seen in w3c capabilities: [build, name, projectName]". Your configuration is incorrect. See https://github.com/serenity-bdd/screenplay-pattern-todomvc and https://github.com/serenity-bdd/screenplay-pattern-todomvc/blob/master/src/test/resources/serenity.conf for an example of a correctly configured LambdaTest test suite.

@mihai60beans
Copy link
Author

mihai60beans commented Oct 17, 2023

My configuration for Chrome Web works also. The configuration for LambdaTest: Chrome mobile android or Safari mobile ios does not work.

I took your project and changed the serenity.conf and the same result: Chrome Web works but Safari iOS or Chrome android does not work.

I am running mvn clean verify -Ppageobjects

This is the error I receive for Safari iOS:

[ERROR] LearnAboutTheApplication.should_see_how_to_begin_with_page_objects:24 » DriverConfiguration WebDriver was unable to create a new instance of type class org.openqa.selenium.remote.RemoteWebDriver WebDriver reported the following message: Could not start a new session. Handshake response does not match any supported protocol. Response payload: {"sessionId":"SZHCI-LB4DU-OVLVR-6FHPU","status":0,"value":{"browserName":"Safari","databaseEnabled":false,"deviceName":"iPhone 12","deviceReadyTimeout":120,"fullReset":false,"headless":false,"javascriptEnabled":true,"launchTimeout":300,"locationContextEnabled":false,"locationServicesAuthorized":true,"nativeWebScreenshot":true,"networkConnectionEnabled":false,"newCommandTimeout":910,"performance":false,"platform":"ANY","platformName":"ios","platformVersion":"14.2","shutdownOtherSimulators":true,"takesScreenshot":true,"udid":"","useNewWDA":true,"waitForQuiescence":false,"wdaLaunchTimeout":120000,"webStorageEnabled":false}}

serenity.conf

  base.url = "http://todomvc.com/examples/angularjs/#/"
  driver = chrome
  capabilities {
    browserName = "chrome"
    acceptInsecureCerts = true
    unhandledPromptBehavior = accept
    "goog:chromeOptions" {
      args = ["test-type", "ignore-certificate-errors", "--window-size=1000,800",
        "--remote-allow-origins=*","incognito", "disable-infobars", "disable-gpu",
        "disable-default-apps", "disable-popup-blocking"]
    }
  }
}
headless.mode = false

serenity {
  project.name = "Serenity BDD TodoMVC"
  test.root = "net.serenitybdd.demos.todos"
  tag.failures = "true"
  linked.tags = "issue"
  restart.browser.for.each = scenario
  logging = verbose
  #
  # Use these options to reduce the size of the reports
  #
  # Report on test durations
  report.test.durations = true
  # Store HTML source for each page
  # (can be: ALWAYS, FAILURES or NEVER)
//  store.html = FAILURES
}

// Default page configuration
home.page = "http://todomvc.com/examples/angularjs/#/"

environment = lambdatest
environments {
  local {
    home.page = "http://localhost:8080/angularjs/#/"
  }
  prod {
    home.page = "http://todomvc.com/examples/angularjs/#/"
  }
  chrome {
    webdriver {
      driver = chrome
      autodownload = true
      capabilities {
        browserName = "chrome"
        acceptInsecureCerts = true
        "goog:chromeOptions" {
          args = ["test-type", "ignore-certificate-errors", "headless", "--window-size=1000,800"
            "incognito", "disable-infobars", "disable-gpu", "disable-default-apps", "disable-popup-blocking"]
        }
      }
    }
  }

   lambdatest {
      home.page = "http://todomvc.com/examples/angularjs/#/"
      #
      # You define the Lambdatest credentials either in the LT_USERNAME and LT_ACCESS_KEY environment variables, or by
      # setting the following properties:
      #
      # lt.user = your.username
      # lt.key = your.access.key
      #
      # You can also override the Lambdatest grid url by setting the following property.
      # lt.grid="hub.lambdatest.com"
      webdriver {
        driver = remote
        remote.url = "https://myusername:mypassword@hub.lambdatest.com/wd/hub"
        capabilities {
          #appium.browserName = "Safari"
          #browserName = "Chrome"
          browserName = "Safari"
          #browserVersion = "latest"
          "LT:options" {

            #appium.browserName = "Safari"
            #appium.automationName = "XCUITest"
            #appium.platformName = "ios"
            #appium.deviceName = "iPhone 12"

            #browserName = "Safari"
            #automationName = "XCUITest"

            platformName = "ios"
            deviceName = "iPhone 12"

            #platformName = "ios"
            #deviceName = "iPhone 12"

            #appium.platformName = "android"
            #appium.deviceName = "Galaxy S22 Ultra 5G"
            #platformName = "android"
            #deviceName = "Galaxy S22 Ultra 5G"

            isRealMobile = "false"
          }
        }
      }

#   webdriver {
#           driver = remote
#           remote.url = "https://myusername:mypassword@hub.lambdatest.com/wd/hub"
#           capabilities {
#             browserName = "chrome"
#             "goog:chromeOptions" {
#               args = ["test-type", "no-sandbox", "ignore-certificate-errors", "--window-size=1000,800",
#                 "incognito", "disable-infobars", "disable-gpu", "disable-default-apps", "disable-popup-blocking"]
#             }
#             "LT:options" {
#               platformName = "Windows 10"
#             }
#           }
#         }
    }
}```

@mihai60beans mihai60beans changed the title Lambdatest plugin - Illegal key values seen in w3c capabilities: [build, name, projectName] Lambdatest plugin - Mobile iOS Safari - Handshake response does not match any supported protocol Oct 17, 2023
@wakaleo
Copy link
Member

wakaleo commented Oct 17, 2023

I don't use the Safari driver very often but you will need to find the right combination of W3C properties to work with Safari on LambdaTest. If it works with Chrome it isn't a Serenity issue (Serenity just sends the W3C options you provide it), so you should ask the LambdaTest folk.

This configuration worked for me:

    webdriver {
      driver = remote
      remote.url = "https://"${LT_USERNAME}":"${LT_ACCESS_KEY}"@hub.lambdatest.com/wd/hub"
      capabilities {
        browserName = "Safari"
        "LT:options" {
          platformName = "Mac OS X"
        }
      }

@mihai60beans
Copy link
Author

Safari Web works indeed, Safari mobile iOS doesn't work with serenity 4.x.x versions but it did work with serenity 3.6.7 version.

Below worked for Safari mobile iOS with serenity 3.6.7.

environments {
    lambdatest_safari_mobile {
        webdriver {
            driver = remote
            remote.url = "https://myusername:mypassword@hub.lambdatest.com/wd/hub"
            capabilities {
                browserName = "Safari"
                browserVersion = "latest"
                "LT:Options" {
                    platformName = "ios"
                    deviceName = "iPhone 12"
                    isRealMobile = "false"
                }
            }
        }
    }

I will ask also LambdaTest team if you say it's not a Serenity plugin issue.

@wakaleo
Copy link
Member

wakaleo commented Oct 17, 2023

You will want to ask them about any modifications you need to do to your capabilities for Selenium 4.x, as the latest versions of Serenity use the latest versions of Selenium which have a number of breaking changes.

@mihai60beans
Copy link
Author

sure, will do. thanks! I will close this then.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants