Проблема с PageFactory.InitElements в API WebDriver c # .NET - PullRequest
0 голосов
/ 23 июня 2011

Я пытаюсь создать каркас тестов пользовательского интерфейса WebDriver, используя шаблон объекта Page, используя следующий URL в качестве ссылки: http://www.peternewhook.com/2010/09/automated-testing-pageobjects-webdriver/

В соответствии с примером я создал 3 класса (см. Ниже).Проблема со строкой return PageFactory.InitElements(_driver, page); в методе Search класса SearchPage.

При попытке собрать я получаю следующую ошибку:

Тип 'OpenQA.Selenium.ISearchContext' определяется в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку 'WebDriver

Достаточно справедливо, так как я ссылаюсь на WebDriver.Common.dll, поэтому я попытался удалить ее и добавил WebDriver.dll в свои ссылки, и внезапно яполучить следующее при сборке:

Невозможно неявно преобразовать тип 'void' в 'ConsoleApplication1.ResultsPage'

, и он завершается ошибкой на той же строке;при наведении на него указывается:

Невозможно преобразовать тип выражения 'void' в 'ConsoleApplication1.ResultsPage'.

Я также пытался ссылаться на обе сборки и думал, что яможно использовать по-разному, но это не работает, не работает.

Почему нельзя вернуть PageFactory.InitElements при использовании WebDriver.dll?

Есть ли способ обойти это?Или я могу добиться того же результата, слегка изменив архитектуру?
Ваша помощь очень ценится.Благодарю.

using OpenQA.Selenium;

namespace ConsoleApplication1
{
    public class Page
    {
        public IWebDriver _driver;

        public Page(IWebDriver driver)
        {
            this._driver = driver;
        }
    }
}

using OpenQA.Selenium;

namespace ConsoleApplication1
{
    public class ResultsPage : Page
    {
        public ResultsPage(IWebDriver driver)
            : base(driver)
        {
        }

        private IWebElement count;

        public string GetPagesReturned()
        {
            return count.Text;
        }
    }
}

using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;

namespace ConsoleApplication1
{
    public class SearchPage : Page
    {
        public SearchPage(IWebDriver driver) : base(driver)
        {
        }

        private IWebElement q;
        private IWebElement go;

        public ResultsPage Search(string searchStatement)
        {
            q.SendKeys(searchStatement);
            go.Click();
            ResultsPage page = new ResultsPage(_driver);
            return PageFactory.InitElements(_driver, page);
        }
    }
}

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Проблема в том, что PageFactory.InitElements() возвращает void. Скорее, он изменяет страницу, на которой вы прошли. Ваш код должен выглядеть примерно так:

public ResultsPage Search(string searchStatement)
{
    q.SendKeys(searchStatement);
    go.Click();
    ResultsPage page = new ResultsPage(_driver);
    PageFactory.InitElements(_driver, page);
    return page;
}
0 голосов
/ 29 мая 2012

Использование PageFactory.InitElements (_driver, this);на конструкторе вашего базового класса страницы.

public class Page
{
    public IWebDriver _driver;

    public Page(IWebDriver driver)
    {
        this._driver = driver;
        PageFactory.InitElements(_driver, this);
    }
}
0 голосов
/ 25 июля 2011

Похоже, C # PageFactory не инициирует частные элементы суперкласса (через PageFactory.InitElements) по этому поводу:

http://code.google.com/p/selenium/issues/detail?id=1189#makechanges

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...