No Modelo de Objeto de Página, todas as classes precisam compartilhar uma única instância de driver?
Posso criar um arquivo BaseTest.java e declarar o driver WebDriver estático Público; iniciar. Então, todas as classes podem estender e usar a mesma referência de driver.
Então, todas as minhas classes de teste podem usar a mesma instância.
Eu posso usar:
driver = new ChromeDriver();
em cada método de teste ou cenário de pepino. Estou confuso, como usar o driver. O driver é uma sessão de janela do Chrome?
Respostas
O driver é uma sessão de janela do Chrome?
Não. Um ChromeDriver representa um servidor que controla um navegador Chrome executado localmente. O servidor controlará o ciclo de vida do navegador, como iniciação, eliminação e controle de ações.
Para obter mais detalhes, consulte a documentação
Posso criar driver = new ChromeDriver (); em cada método de teste ou cenário de pepino
Sim, mas vai depender do seu contexto. Se você deseja que vários navegadores sejam executados independentemente em algumas ações, você pode criar um novo driver.
Bônus:
Posso criar um arquivo BaseTest.java e declarar o driver WebDriver estático Público; iniciar. Então, todas as classes podem estender e usar a mesma referência de driver.
Isso pode ser perigoso. Herança é a forma mais forte de acoplamento que você pode fazer e ter uma variável global pode causar mudanças em comportamentos muito difíceis de entender. Você pode querer refatorar seu código para que as instâncias de Driver sejam injetadas em seus Objetos de Página . Desta forma, você não está acoplando os Objetos de Página a uma variável global e pode facilmente criar testes de unidade para eles, injetando um duplo de teste para o Driver.
O que é chromedriver:
chromedriver possui código que pode interagir com o navegador. Esses comandos são expostos por meio de uma API (isso é o que você vê quando chromedriver iniciado no localhost: 14563). A partir do código, acessamos esses endpoints da API para informar ao driver do Chrome para fazer algo.
Por exemplo, quando você diz elem.click (), o selênio se comunica com a API e diz ao chromedriver para clicar no elemento especificado no navegador. E o driver do Chrome faz isso e retorna a resposta do navegador e a devolve ao nosso código

Por que precisamos de classe base
Isso é para garantir que as sessões de driver sejam passadas entre classes diferentes. Caso contrário, você não será capaz de fazer algo como
page1.sendpassword()
page1.sendusername()
page1.submit()
page2.adduser()
Porque se você tiver uma sessão de driver diferente para a página 1 e a página 2,
então, assim que você iniciar page2.adduser (), o driver chrome será iniciado novamente e suas sessões de login anteriores não estarão disponíveis, então você tem que fazer login novamente
Além disso, você não pode adicionar capturas de tela ou ações específicas do driver em classes de ouvinte para relatórios
Você pode ler mais sobre a classe básica em:
Qual é o propósito de criar uma classe BaseTest que declara um objeto WebDriver estático global na estrutura POM?
A instância do WebDriver em seu código é um tipo de canal que você usa para interagir com uma única sessão de implementação do driver da web. Basicamente, o que você usa em seu código é chamado de vinculação de cliente .
Um WebDriver é um servidor HTTP que expõe a API REST para as ligações do cliente (por exemplo, bibliotecas Java) de um lado e pode controlar o navegador do outro.
Portanto, todo o seu código que presume-se que funcione com a mesma sessão do Chrome (preservando cookies, etc.) deve compartilhar a mesma instância do driver da web.
Nada impede você de instanciar mais um mergulhador em seu código. Por meio dessa nova instância, você obterá o controle de uma sessão de navegador isolada paralela diferente.