mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-21 14:04:12 +01:00
Fixing Selenium tests failing because of dynamic hidden elements
This commit is contained in:
parent
4f5f52b937
commit
304caaaf1d
1 changed files with 41 additions and 17 deletions
|
@ -71,7 +71,7 @@ namespace BTCPayServer.Tests
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|
||||||
s.Driver.AssertElementNotFound(By.Id("emailAddressFormInput"));
|
s.Driver.AssertElementNotFound(By.Id("emailAddressFormInput"));
|
||||||
s.Driver.Navigate().Refresh();
|
s.Driver.Navigate().Refresh();
|
||||||
s.Driver.AssertElementNotFound(By.Id("emailAddressFormInput"));
|
s.Driver.AssertElementNotFound(By.Id("emailAddressFormInput"));
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ namespace BTCPayServer.Tests
|
||||||
s.GoToInvoiceCheckout(invoiceId);
|
s.GoToInvoiceCheckout(invoiceId);
|
||||||
Assert.True(s.Driver.FindElement(By.Id("DefaultLang")).FindElements(By.TagName("option")).Count > 1);
|
Assert.True(s.Driver.FindElement(By.Id("DefaultLang")).FindElements(By.TagName("option")).Count > 1);
|
||||||
var payWithTextEnglish = s.Driver.FindElement(By.Id("pay-with-text")).Text;
|
var payWithTextEnglish = s.Driver.FindElement(By.Id("pay-with-text")).Text;
|
||||||
|
|
||||||
var prettyDropdown = s.Driver.FindElement(By.Id("prettydropdown-DefaultLang"));
|
var prettyDropdown = s.Driver.FindElement(By.Id("prettydropdown-DefaultLang"));
|
||||||
prettyDropdown.Click();
|
prettyDropdown.Click();
|
||||||
await Task.Delay(200);
|
await Task.Delay(200);
|
||||||
|
@ -100,13 +100,13 @@ namespace BTCPayServer.Tests
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
Assert.NotEqual(payWithTextEnglish, s.Driver.FindElement(By.Id("pay-with-text")).Text);
|
Assert.NotEqual(payWithTextEnglish, s.Driver.FindElement(By.Id("pay-with-text")).Text);
|
||||||
s.Driver.Navigate().GoToUrl(s.Driver.Url + "?lang=da-DK");
|
s.Driver.Navigate().GoToUrl(s.Driver.Url + "?lang=da-DK");
|
||||||
|
|
||||||
Assert.NotEqual(payWithTextEnglish, s.Driver.FindElement(By.Id("pay-with-text")).Text);
|
Assert.NotEqual(payWithTextEnglish, s.Driver.FindElement(By.Id("pay-with-text")).Text);
|
||||||
|
|
||||||
s.Driver.Quit();
|
s.Driver.Quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact(Timeout = TestTimeout)]
|
[Fact(Timeout = TestTimeout)]
|
||||||
[Trait("Altcoins", "Altcoins")]
|
[Trait("Altcoins", "Altcoins")]
|
||||||
[Trait("Lightning", "Lightning")]
|
[Trait("Lightning", "Lightning")]
|
||||||
|
@ -121,7 +121,7 @@ namespace BTCPayServer.Tests
|
||||||
s.RegisterNewUser();
|
s.RegisterNewUser();
|
||||||
var store = s.CreateNewStore();
|
var store = s.CreateNewStore();
|
||||||
s.AddDerivationScheme("BTC");
|
s.AddDerivationScheme("BTC");
|
||||||
|
|
||||||
//check that there is no dropdown since only one payment method is set
|
//check that there is no dropdown since only one payment method is set
|
||||||
var invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
var invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
||||||
s.GoToInvoiceCheckout(invoiceId);
|
s.GoToInvoiceCheckout(invoiceId);
|
||||||
|
@ -129,33 +129,31 @@ namespace BTCPayServer.Tests
|
||||||
s.GoToHome();
|
s.GoToHome();
|
||||||
s.GoToStore(store.storeId);
|
s.GoToStore(store.storeId);
|
||||||
s.AddDerivationScheme("LTC");
|
s.AddDerivationScheme("LTC");
|
||||||
s.AddLightningNode("BTC",LightningConnectionType.CLightning);
|
s.AddLightningNode("BTC", LightningConnectionType.CLightning);
|
||||||
//there should be three now
|
//there should be three now
|
||||||
invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
||||||
s.GoToInvoiceCheckout(invoiceId);
|
s.GoToInvoiceCheckout(invoiceId);
|
||||||
var currencyDropdownButton = s.Driver.FindElement(By.ClassName("payment__currencies"));
|
var currencyDropdownButton = s.Driver.WaitForElement(By.ClassName("payment__currencies"));
|
||||||
Assert.Contains("BTC", currencyDropdownButton.Text);
|
Assert.Contains("BTC", currencyDropdownButton.Text);
|
||||||
currencyDropdownButton.Click();
|
currencyDropdownButton.Click();
|
||||||
|
|
||||||
var elements = s.Driver.FindElement(By.ClassName("vex-content")).FindElements(By.ClassName("vexmenuitem"));
|
var elements = s.Driver.FindElement(By.ClassName("vex-content")).FindElements(By.ClassName("vexmenuitem"));
|
||||||
Assert.Equal(3, elements.Count);
|
Assert.Equal(3, elements.Count);
|
||||||
elements.Single(element => element.Text.Contains("LTC")).Click();
|
elements.Single(element => element.Text.Contains("LTC")).Click();
|
||||||
Thread.Sleep(1000);
|
currencyDropdownButton = s.Driver.WaitForElement(By.ClassName("payment__currencies"));
|
||||||
currencyDropdownButton = s.Driver.FindElement(By.ClassName("payment__currencies"));
|
|
||||||
Assert.Contains("LTC", currencyDropdownButton.Text);
|
Assert.Contains("LTC", currencyDropdownButton.Text);
|
||||||
currencyDropdownButton.Click();
|
currencyDropdownButton.Click();
|
||||||
|
|
||||||
elements = s.Driver.FindElement(By.ClassName("vex-content")).FindElements(By.ClassName("vexmenuitem"));
|
elements = s.Driver.FindElement(By.ClassName("vex-content")).FindElements(By.ClassName("vexmenuitem"));
|
||||||
elements.Single(element => element.Text.Contains("Lightning")).Click();
|
elements.Single(element => element.Text.Contains("Lightning")).Click();
|
||||||
Thread.Sleep(1000);
|
|
||||||
currencyDropdownButton = s.Driver.FindElement(By.ClassName("payment__currencies"));
|
|
||||||
|
|
||||||
|
currencyDropdownButton = s.Driver.WaitForElement(By.ClassName("payment__currencies"));
|
||||||
Assert.Contains("Lightning", currencyDropdownButton.Text);
|
Assert.Contains("Lightning", currencyDropdownButton.Text);
|
||||||
|
|
||||||
s.Driver.Quit();
|
s.Driver.Quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact(Timeout = TestTimeout)]
|
[Fact(Timeout = TestTimeout)]
|
||||||
[Trait("Lightning", "Lightning")]
|
[Trait("Lightning", "Lightning")]
|
||||||
public async Task CanUseLightningSatsFeature()
|
public async Task CanUseLightningSatsFeature()
|
||||||
|
@ -171,12 +169,12 @@ namespace BTCPayServer.Tests
|
||||||
s.GoToStore(store.storeId, StoreNavPages.Checkout);
|
s.GoToStore(store.storeId, StoreNavPages.Checkout);
|
||||||
s.SetCheckbox(s, "LightningAmountInSatoshi", true);
|
s.SetCheckbox(s, "LightningAmountInSatoshi", true);
|
||||||
var command = s.Driver.FindElement(By.Name("command"));
|
var command = s.Driver.FindElement(By.Name("command"));
|
||||||
|
|
||||||
command.ForceClick();
|
command.ForceClick();
|
||||||
var invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
var invoiceId = s.CreateInvoice(store.storeName, 10, "USD", "a@g.com");
|
||||||
s.GoToInvoiceCheckout(invoiceId);
|
s.GoToInvoiceCheckout(invoiceId);
|
||||||
Assert.Contains("Sats", s.Driver.FindElement(By.ClassName("payment__currencies_noborder")).Text);
|
Assert.Contains("Sats", s.Driver.FindElement(By.ClassName("payment__currencies_noborder")).Text);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,4 +216,30 @@ namespace BTCPayServer.Tests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SeleniumExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Utility method to wait until timeout for element to be present (optionally displayed)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">Wait context</param>
|
||||||
|
/// <param name="by">How we search for element</param>
|
||||||
|
/// <param name="displayed">Flag to wait for element to be displayed or just present</param>
|
||||||
|
/// <param name="timeout">How long to wait for element to be present/displayed</param>
|
||||||
|
/// <returns>Element we were waiting for</returns>
|
||||||
|
public static IWebElement WaitForElement(this IWebDriver context, By by, bool displayed = true, uint timeout = 3)
|
||||||
|
{
|
||||||
|
var wait = new DefaultWait<IWebDriver>(context);
|
||||||
|
wait.Timeout = TimeSpan.FromSeconds(timeout);
|
||||||
|
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
|
||||||
|
return wait.Until(ctx =>
|
||||||
|
{
|
||||||
|
var elem = ctx.FindElement(by);
|
||||||
|
if (displayed && !elem.Displayed)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue