mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2026-02-04 00:08:33 +00:00
134 lines
5.0 KiB
C#
134 lines
5.0 KiB
C#
using FlaUI.Core.AutomationElements;
|
|
using FlaUI.Core.Input;
|
|
using FlaUI.Core.Definitions;
|
|
using ProtonMailBridge.UI.Tests.TestsHelper;
|
|
using ProtonMailBridge.UI.Tests.Results;
|
|
using System.Diagnostics;
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
namespace ProtonMailBridge.UI.Tests.Windows
|
|
{
|
|
public class LoginWindow : UIActions
|
|
{
|
|
private AutomationElement[] InputFields => Window.FindAllDescendants(cf => cf.ByControlType(ControlType.Edit));
|
|
private TextBox UsernameInput => InputFields[0].AsTextBox();
|
|
private AutomationElement PasswordGroup => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Group).And(cf.ByName("Password")));
|
|
private TextBox PasswordInput => PasswordGroup.FindFirstDescendant(cf => cf.ByControlType(ControlType.Edit)).AsTextBox();
|
|
private Button SignInButton => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Button).And(cf.ByName("Sign in"))).AsButton();
|
|
private Button SigningInButton => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Button).And(cf.ByName("Signing in"))).AsButton();
|
|
private Button StartSetupButton => Window.FindFirstDescendant(cf => cf.ByName("Start setup")).AsButton();
|
|
private Button SetUpLater => Window.FindFirstDescendant(cf => cf.ByName("Setup later")).AsButton();
|
|
private TextBox MailboxPasswordInput => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Edit)).AsTextBox();
|
|
private Button UnlockButton => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Button).And(cf.ByName("Unlock"))).AsButton();
|
|
private Button CancelSignIn => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Button).And(cf.ByName("Cancel"))).AsButton();
|
|
|
|
private Button UnlockingButton => Window.FindFirstDescendant(cf => cf.ByControlType(ControlType.Button).And(cf.ByName("Unlocking"))).AsButton();
|
|
|
|
private static readonly int loginTimeout = 500;
|
|
|
|
public LoginWindow SignIn(TestUserData user)
|
|
{
|
|
ClickStartSetupButton();
|
|
|
|
TestContext.Out.WriteLine($"Trying to login with '{user.Username}':'{user.Password}'. Attempt {i}.");
|
|
EnterCredentials(user);
|
|
WaitForAuthorizationToComplete(loginTimeout);
|
|
|
|
SetUpLater?.Click();
|
|
|
|
return this;
|
|
}
|
|
|
|
public LoginWindow SignInMailbox(TestUserData user)
|
|
{
|
|
SignIn(user);
|
|
EnterMailboxPassword(user);
|
|
WaitForUnlockToComplete(loginTimeout);
|
|
|
|
SetUpLater?.Click();
|
|
|
|
return this;
|
|
}
|
|
|
|
public LoginWindow SignIn(string username, string password)
|
|
{
|
|
TestUserData user = new TestUserData(username, password);
|
|
SignIn(user);
|
|
return this;
|
|
}
|
|
public LoginWindow ClickStartSetupButton()
|
|
{
|
|
StartSetupButton?.Click();
|
|
|
|
return this;
|
|
}
|
|
|
|
public LoginWindow EnterCredentials(TestUserData user)
|
|
{
|
|
for (int i = 0; i < InputFields.Length; i++)
|
|
{
|
|
Console.WriteLine($"---------- {InputFields[i].Name} ----------");
|
|
}
|
|
|
|
UsernameInput.Text = user.Username;
|
|
PasswordInput.Text = user.Password;
|
|
TestContext.Out.WriteLine($"Trying to sign in with username '{user.Username}' and password '{user.Password}'");
|
|
SignInButton.Click();
|
|
return this;
|
|
}
|
|
|
|
public LoginWindow EnterMailboxPassword(TestUserData user)
|
|
{
|
|
MailboxPasswordInput.Text = user.MailboxPassword;
|
|
TestContext.Out.WriteLine($"Entering mailbox password '{user.MailboxPassword}'");
|
|
UnlockButton.Click();
|
|
return this;
|
|
}
|
|
|
|
public LoginWindow ClickCancelToSignIn ()
|
|
{
|
|
CancelSignIn.Click();
|
|
return this;
|
|
}
|
|
|
|
private void WaitForAuthorizationToComplete(int numOfSeconds)
|
|
{
|
|
TimeSpan timeout = TimeSpan.FromSeconds(numOfSeconds);
|
|
Stopwatch stopwatch = Stopwatch.StartNew();
|
|
|
|
|
|
while (stopwatch.Elapsed < timeout)
|
|
{
|
|
//if Signing in button is not visible authorization process is finished
|
|
if (SigningInButton == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Wait.UntilInputIsProcessed();
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
}
|
|
|
|
private void WaitForUnlockToComplete(int numOfSeconds)
|
|
{
|
|
TimeSpan timeout = TimeSpan.FromSeconds(numOfSeconds);
|
|
Stopwatch stopwatch = Stopwatch.StartNew();
|
|
|
|
|
|
while (stopwatch.Elapsed < timeout)
|
|
{
|
|
//if Signing in button is not visible authorization process is finished
|
|
if (UnlockingButton == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Wait.UntilInputIsProcessed();
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
}
|
|
}
|
|
} |