4

We are moving from selenium 3 grid to selenium 4 grid(with hub & node setup). We need to be able to fetch IP address of node on which the current session is being executed on(session id is fetched from driver.getSessionId())

For selenium3 grid, we got this info from <hub url>/grid/api/testsession?session=<sessionId>

I cannot find an equivalent endpoint for selenium 4 grid. I could find graphql query parameters but it fetches details for ALL the sessions. I need to find session details only for ONE session id.

Any help?

Shivam Mishra
  • 1,731
  • 2
  • 11
  • 29

1 Answers1

1

Note: Based on how the question is formulated I assume we are talking about node URI, which it's not always precise IP address of it. Having the URI it shouldn't be difficult to find the real ip, if indeed needed. Taking this into account...

GraphQL endpoint is the place to go. You can narrow the results by querying for specific sessionID (which you can get from webdriver as you pointed out).

cUrl example:

curl -X POST -H "Content-Type: application/json" --data '{"query":"{ session (id: \"<session-id>\") { id, capabilities, startTime, uri, nodeId, nodeUri, sessionDurationMillis, slot { id, stereotype, lastStarted } } } "}' -s <LINK_TO_GRAPHQL_ENDPOINT>

Prototype in node.js:

const { Builder } = require('selenium-webdriver');
const axios = require('axios').default;


async function main() {
    let driver = await new Builder()
        .usingServer('http://localhost:4444')
        .forBrowser('chrome')
        .build();

    try {
        await driver.get('https://www.cogitovirus.com/');
        const title = await driver.getTitle();
        console.log(`Sanity check. Title is: ${title}`);

        const sessionId = (await driver.getSession()).getId()
        console.log(`Session id: ${sessionId}`)

        const res = await axios.post('http://localhost:4444/graphql', {
            query: `{ session (id: \"${sessionId}\") { id, uri, nodeId, nodeUri} }`
        });

        console.log(res.data)
    } catch (err) {
        console.log(err)
    } finally {
        await driver.quit()
    }
}

main()

Prints out:

Sanity check. Title is: cogitovirus.com
Session id: ce19fd89269af93327655537a1b65330
{
  data: {
    session: {
      id: 'ce19fd89269af93327655537a1b65330',
      uri: 'http://172.18.0.3:5555',
      nodeId: 'ea5414e7-ac40-4744-aea5-8ff6faeeb8e2',
      nodeUri: 'http://172.18.0.3:5555'
    }
  }
}

Tested using a quick setup of selenium grid docker

Grid GraphQL documentation

cogitovirus
  • 705
  • 6
  • 11
  • cogitovirus,i am also facing issues with this(JAVA) as getting error "message": "Unable to parse: {query: { session (id: d5382daee94860671ae972fcba359e03) { id, capabilities, startTime, uri, nodeId, nodeUri, sessionDurationMillis, slot { id, stereotype, lastStarted } } } }", Could you please help me get the somution on it. – SacTan Jul 25 '22 at 16:06