Я умоляю тебя о помощи!
Я использую PageFactory для инициализации моего PageOjbect. Один PageObject вызывается двумя разными классами (также PageObjects). Когда я вызываю его из первого класса, проблем нет. Но когда я вызываю его из второго класса, появляется ошибка «нет такой сессии».
Отлаживая свой код, я понял, что у меня возникает эта ошибка, когда PageFactory не успевает найти элементы моей страницы. Я попытался кэшировать все элементы, но это не решило проблему.
Итак, есть мой проблемный класс:
public class OrderSettingsPage : DriverCover
{
public OrderSettingsPage(IWebDriver driver) : base(driver)
{
PageFactory.InitElements(Driver, this);
}
public string HowToDeliver
{
get; set;
}
[FindsBy(How = How.TagName, Using = "h1"), UsedImplicitly]
private IWebElement _mainHeadline;
public string MainHeadline
{
get { return _mainHeadline.Text; }
}
[FindsBy(How = How.Id, Using = "Surname"), UsedImplicitly]
private IWebElement _surnameTextBox;
public IWebElement SurnameTextBox
{
get { return _surnameTextBox; }
}
}
Кусок кода, показывающий шаги теста:
IWebDriver chrome = new ChromeDriver();
MainFunctions load = new MainFunctions(chrome);
load.NavigateToMainPage();
load.IfNotLoggedThenLogin();
load.NavigateToUrl(load.BaseUrl + "books/create");
BookThemeChoosingPage bookThemeChoosing = new BookThemeChoosingPage(chrome);
BookFormatChoosingPage bookFormatChoosing = bookThemeChoosing.ContinueWithoutTheme();
bookFormatChoosing.ChooseFormat();
OrderSettingsPage orderSettings = bookFormatChoosing.Continue();
//There is my neck pain!)
orderSettings.SetOrderSettings(howToPay, howToDeliver);
И метод bookFormatChoosing.Continue():
public OrderSettingsPage Continue()
{
WaitAjax();
_continueButton.Click();
WaitAjax();
IList<IWebElement> elements = Driver.FindElements(By.Id("loginButtonIdInBox"));
MainFunctions load = new MainFunctions(Driver);
if (elements.Count > 0)
{
load.LoginInPopUpWindow();
WaitAjax();
}
WaitForPageLoading();
int idOfAlbum = DetermineId();
NavigateToUrl(load.BaseUrl + "order/book/" + idOfAlbum);
return new OrderSettingsPage(Driver);
}
Итак, что не так? Все элементы представлены на странице, и шаги, подобные следующим, не вызывают описанной проблемы:
IWebDriver chrome = new ChromeDriver();
MainFunctions load = new MainFunctions(chrome);
load.NavigateToMainPage();
load.IfLoggedThenLogOut();
switch (typeOfProduct)
{
case ProductType.Cup:
{
load.NavigateToUrl(load.BaseUrl + "souvenir/create?productClass=1");
}
break;
........
}
SouvenirConstructorPage constructor = new SouvenirConstructorPage(chrome);
OrderSettingsPage orderSettings = constructor.PlaceOrder();
//The same method doesn't couse any problem
orderSettings.SetOrderSettings(howToPay, howToDeliver);
Ошибка в Nunit:
System.InvalidOperationException : no such session
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64) (NoSuchDriver)
Selenium v. 2.42 Chrome v. 37.0.2062.103 Драйвер Chrome v 2.10