#c# #selenium #unit-testing #object-reference
#c# #селен #модульное тестирование #ссылка на объект #selenium
Вопрос:
Я пытаюсь получить список iFrames на странице, но по какой-то причине я продолжаю получать две ошибки. А именно, я получаю нулевой драйвер и «Ссылка на объект не установлена на экземпляр объекта», когда я это делаю var iFrame = driver.FindElements(By.TagName("frame"));
. Я потратил полдня, пытаясь разобраться в этом, и я чувствую, что застряну в колее, если не попрошу помощи по переполнению стека.
Класс базового фрейма:
public class BaseIFrame
{
protected IWebDriver _driver;
private ReadOnlyCollection<IWebElement> _elements;
private ReadOnlyCollection<IWebElement> _iframes;
public BaseIFrame(IWebDriver _driver)
{
this._driver = _driver;
_iframes = _driver.FindElements(By.TagName("frame"));
_elements = new ReadOnlyCollection<IWebElement>(_iframes);
}
public void GetAlliFrames()
{
try
{
if (_elements.Count > 0)
{
_driver.SwitchTo().Frame(0);
}
}
catch (Exception e)
{
Debug.WriteLine(e.FormatExceptionMessage(this));
throw;
}
}
}
BaseiFrameTests метод класса, который вызывает класс BaseiFrame
public class BaseiFrameTests : SharedBase
{
protected IWebDriver _driver;
private BaseConfig config;
private BaseConfig initialUrl;
//string url = "http://127.0.0.1:1024/";
public BaseiFrameTests()
{
}
public override BaseConfig getConfig()
{
return new Config
{
initialUrl = "http://the-internet.herokuapp.com/nested_frames"
};
}
public override BaseConfig loadConfig()
{
return new BaseConfig();
}
public override IWebDriver getDriver()
{
return instantiateWebDriver("edge");
}
[TestMethod]
public void AssertiFrameLength()
{
BaseIFrame bif = new BaseIFrame(_driver);
bif.GetAlliFrames();
}
}
Комментарии:
1. this._driver = _driver; я подозреваю, что проблема в именовании драйвера. можете ли вы попробовать использовать другие имена драйверов
2. можете ли вы поделиться кодом, в котором вы создаете экземпляр своего драйвера, и как вы добираетесь до этого класса? — я вижу, что вы передаете это в конструкторе, но потенциально ли это значение равно null?
3. Я должен посмотреть, смогу ли я. Мой webdriver создается из класса BaseiFrameTest через сложный интерфейс, созданный компанией, в которой я работаю. Мне удалось успешно запустить драйвер в BaseiFrameTest… но мне пришлось пройти через обручи, чтобы сделать это достаточно интересно.
4. Посмотри, что ты можешь сделать, приятель 🙂 —
complex interface
всегда звучит забавно. При необходимости выполните простой тест за пределами вашего приложения. Перейдите куда-нибудь, например, в Google, и введите что-нибудь в поиске. Это гарантирует, что ваш драйвер работает, и это не имеет ничего общего с вашими фреймами или тестируемым приложением.5. Только что получил зеленый свет! Однако мой руководитель сказал, что не более того, поскольку он углубляется в нашу основную базу кода автоматизации. Внесены изменения. Надеюсь, они помогут
Ответ №1:
Обновление: я смог устранить свою проблему, инициализировав getDriver()
onto new BaseiFrame();
в AssertiFrameLength
методе.