C # Webdriver FindsBy - для элементов кендо - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь представить FindsBy в моем тестовом проекте

public class BoaRegistrationPage
{
    public IWebDriver Driver;

    public BoaRegistrationPage(IWebDriver driver)
    {
        this.Driver = driver;
        PageFactory.InitElements(driver, this);
    }

    [FindsBy(How = How.Id, Using = "ReportingPeriodName")]
    public SeleniumKendoDropDownList ReportingPeriodDropDown { get; set; }

    [FindsBy(How=How.Id, Using ="BranchCode")]
    public IWebElement BranchCode { get; set; }
}

(...)

К сожалению, как вы можете видеть, мне нужно использовать его также для типов, отличных от IWebElement, который возвращает ошибку (SeleniuKendoDropDownList).

namespace CompanyReviewSeleniumTests.Wrappers
{
    public class SeleniumKendoDropDownList : KendoDropDownList 
    {
        public SeleniumKendoDropDownList(IWebElement webElement) : base(webElement)
        {
            this.CopyInternalId(webElement);
        }

        public void SelectByDataItemProperty(string propertyName, string text)
        {
            Driver.JavaScripts()
                .ExecuteScript(
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "$('{0}').data('{1}').select(function(dataItem) {{return dataItem.{3} === '{2}';}});",
                        ElementCssSelector,
                        SelectType,
                        text,
                        propertyName));
        }

        public new void SelectByText(string text)
        {
            WaitUntilOptionsLoaded();
            Open();
            var listBoxElement = Driver.FindElement(By.CssSelector($"{this.ElementCssSelector}_listbox"));
            listBoxElement.FindElement(By.XPath($".//*[contains(text(),'{text}')]"))?.JavaScriptClick();
        }
    }
}

(...)

Как мне это сделать?

Заранее спасибо за помощь

1 Ответ

0 голосов
/ 02 января 2019

Я сам не могу, но вы можете попробовать следующее:

public class BoaRegistrationPage
{
    public IWebDriver Driver;
    private SeleniumKendoDropDownList _dropDownList;

    public BoaRegistrationPage(IWebDriver driver)
    {
        this.Driver = driver;
        this._dropDownList = null;
        PageFactory.InitElements(driver, this);
    }

    [FindsBy(How = How.Id, Using = "ReportingPeriodName")]
    public IWebElement ReportingPeriodDropDown
    {
        get { return _dropDownList; }
        set { this._dropDownList = new SeleniumKendoDropDownList(value); }
    }

    [FindsBy(How=How.Id, Using ="BranchCode")]
    public IWebElement BranchCode { get; set; }
}

Поскольку KendoDropDownList наследуется от класса RemoteWebElement, который, в свою очередь, реализует интерфейс IWebElement, это должно работать.Однако, если вам нужен доступ к свойствам и методам SeleniumKendoDropDownList извне, вам придется выполнить приведение, например:

((SeleniumKendoDropDownList)boaRegPage.ReportingPeriodDropDown).SelectByDataItemProperty(property, text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...