driver da web selenium executando como usuário diferente, não obtendo perfil / sessão do usuário
Tenho uma situação estranha em que modifiquei levemente o código do driver da web selenium para permitir que o serviço do driver fosse iniciado sob um usuário diferente. As alterações no código do github são:
public void Start()
{
this.driverServiceProcess = new Process();
if (this.user != null)
{
this.driverServiceProcess.StartInfo.UserName = user.Name;
this.driverServiceProcess.StartInfo.Password = user.Password;
this.driverServiceProcess.StartInfo.Domain = user.Domain;
}
this.driverServiceProcess.StartInfo.FileName = Path.Combine(this.driverServicePath, this.driverServiceExecutableName);
this.driverServiceProcess.StartInfo.Arguments = this.CommandLineArguments;
this.driverServiceProcess.StartInfo.UseShellExecute = false;
this.driverServiceProcess.StartInfo.CreateNoWindow = this.hideCommandPromptWindow;
this.driverServiceProcess.Start();
bool serviceAvailable = this.WaitForServiceInitialization();
if (!serviceAvailable)
{
string msg = "Cannot start the driver service on " + this.ServiceUrl;
throw new WebDriverException(msg);
}
}
onde os detalhes do usuário são passados do meu código externo na chamada para instanciar o driver da web:
new ChromeDriver(userName, password, domain);
ou
new InternetExplorerDriver(ieOptions, userName, password, domain);
e propagado através.
Isso inicia com êxito o driver chrome sob as credenciais de usuário necessárias, mas tem um problema com o IE.
Além disso, o driver chrome não tem o mesmo comportamento que o chrome iniciado manualmente pelo usuário fornecido (ou seja, não por um driver selênio). Especificamente, a passagem automática de credenciais do usuário em um desafio NTLM não ocorre.
Descobri que, se eu tiver uma sessão interativa em execução como o usuário desejado (basta usarrunas /user:<theUser> cmd.exe
na linha de comando e deixe a sessão aberta), toda a funcionalidade dos navegadores é a esperada quando iniciada pelo driver da web selenium, incluindo a resposta automática ao desafio do NTLM.
Se eu usarProcess.Start()
para iniciar o cmd.exe como o usuário desejado antes de criar o driver da web, isso não funciona.
Minha pergunta é esta:
O que há de diferente em iniciar um processo programaticamente (usandoProcess.Start()
) em comparação com o lançamento de uma sessão interativa do processo na linha de comando?
E existe alguma maneira de reproduzir fielmente o efeito de iniciar uma sessão a partir da linha de comando no código, para que eu possa automatizar o processo e fazer com que meus drivers da Web funcionem como eu desejo?
nota: tentei iniciar o webdriver usando a representação .net (como sugeridoaqui eaqui), em vez de modificar o código selênio para executar o serviço de driver com outro usuário, mas as solicitações enviadas do driver para um servidor foram todas enviadas pelo meu usuário e não pela especificada pela representação (consulteaqui)