Как выбрать следующий элемент в селене? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть div, который содержит вход с идентификатором в качестве идентификатора и метку в нем.с помощью моего метода селена я могу легко выбрать вход в качестве веб-элемента, но как я могу получить метку веб-элемента через входной веб-элемент?

   <div class="item-selectable small-2 radio-item columns xsmall-12 item-selectable-stacked">
    <input id="0-3" name="RatingQuestions[0].Score" type="radio" value="3" checked="">
 <label for="0-3">
</label>
 </div>

Это метод в селене для выбора веб-элемента, который в настоящее время выбирает тольковвод, а не как он должен метка.

public void RateQuestion(int questionnumber, int rating)
        {
            string questionid = questionnumber.ToString() + "-" + rating.ToString();
            IWebElement RateQuestionElement = this.Driver.FindElement(By.Id(questionid));
            RateQuestionElement.Click();
        }

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

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Есть несколько вариантов:

  1. После того, как вы выберете элемент с questionId, вы сможете продолжить выбирать метку.Например:
IWebElement RateQuestionElement = this.Driver.FindElement(By.Id(questionid)); 

IWebElement RateQuestionLabel = RateQuestionElement.FindElement(By.Css("label"));



RateQuestionLabel.click();

или

Вы можете использовать CssSelector, например:
myCssSelector = "#myQuestionId label"

IWebElement RateQuestionElement = this.Driver.FindElement(By.Css(myCssSelector));

RateQuestionElement.click();

Я не пытался выполнить его сам, но концепция есть

0 голосов
/ 28 ноября 2018

Попробуйте:

public void RateQuestion(int questionnumber, int rating)
        {
            string questionid = questionnumber.ToString() + "-" + rating.ToString();
            IWebElement RateQuestionElement = this.Driver.FindElement(By.Id(questionid)).FindElement(By.Xpath("./../../label"));
            RateQuestionElement.Click();
        }

Или вот:

public void RateQuestion(int questionnumber, int rating)
            {
                string questionid = questionnumber.ToString() + "-" + rating.ToString();
                IWebElement RateQuestionElement = this.FindElement(By.Xpath("//*[contains(local-name(), 'label') and contains(@for, questionid)]"));
                RateQuestionElement.Click();
            }

Последний вариант - я не очень хорош в C #, поэтому, возможно, вам придется поставить {questionid} там, а не просто questionid.

0 голосов
/ 26 ноября 2018

Нет , вы не вызываете click() на <label> узлах, но на <input> узлах.

Согласно HTML для вызова click() на теге <input> относительно тега <label> вы можете использовать следующее решение:

public void RateQuestion(int questionnumber, int rating)
    {
        string questionid = questionnumber.ToString() + "-" + rating.ToString();
        IWebElement RateQuestionElement = this.Driver.FindElement(By.XPath("//label[@for='" + questionid + "']"));
        RateQuestionElement.Click();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...