Scroll com Robot e Selenium

Tenho uma aplicação que simula a navegação do usuario em uma pagina utilizando a classe Robot + Selenium. Consigo simular o uso do mouse normalmente para achar e clicar nos links. O problema acontece quando o link que eu quero não está visivel na tela.

Exemplo, preciso clicar em um link que está no final da página.

WebElement e = driver.findElement(By.id("id"));
Robot robot = new Robot();
robot.mouseMove((int) e.getLocation().getX(), (int) e.getLocation().getY());
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

Isso funciona perfeitamente quando o elemento está visivel para o usuario, mas se ele está no finalda pagina
por exemplo e preciso usar o scroll pra rolar até o final da pagina, não da certo,
Minha dúvida é, existe alguma maneira de pegar a posição relativa do elemento quando ele estiver visivel?

Eu vou rolando a barra de rolagem até achar o elemento, mas quando mando clicar, a posição que tenho dele
não é a posição que ele está naquele momento e sim a posição em relação ao documento inteiro.

Olha eu nao conheço bem essa Selenium, mas o que eu faria é o seguinte, pega o tamanho da pagina e compara com a posição do elemento, se a posição do elemento for maior que o tamanho da pagina é porque ele esta para baixo. entao com alguns calculos voce sabe quanto tem que rolar para baixo e voce subtrai do valor da posição e acha a nova posição. Não sei se ficou claro

Pra navegar eu estou usando c classe Robot do Java, eu posso tanto navegar simulando o “page Down” do teclado qnto posso navegar simulando o scroll do mouse. O que eu to agarrando é esse calculo, cada “page Down” que eu dou ou cada scroll que eu rolo, eu não sei qnto eu teria q subtrair da coordenada Y do link que quero clicar.

Voce tambem consegue rolar para baixo usando a seta do teclado, eu sei que é uma linha que rola usando a setinha para baixo

Não conheço esse Robot, mas pelo menos puramente pelo webdriver, o Selenium consegue sim acessar elementos HTML independentes da rolagem, portanto que já estejam carregados e visíveis lá embaixo, senão seria teste falso tentar acessar algo que de fato não está carregado para o usuário final, alguma ação deveria ser feita antes.

Nesse exemplo consegue acessar o link “BROWSE TEMPLATES” que está no final da página:

driver.Navigate().GoToUrl("https://www.w3schools.com/");
driver.FindElement(By.CssSelector("a.w3-dark-grey:nth-child(1)")).Click();

O exemplo é em C#, mas os nomes das classes são as mesmas, só muda o padrão de nomenclatura.

Se esse não for o caso, dê um exemplo de site real.