如何选择硒中的以下元素?

时间:2018-11-26 08:19:20

标签: c# selenium selenium-webdriver xpath

我有一个div,其中包含一个输入,该输入的标识符为id并带有一个标签。使用我的硒方法,我可以轻松地将输入选择为webElement,但是如何通过Input WebElement获得标签webElement?

   <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>

这是硒中用于选择webElement的方法,当前仅选择输入而不是标签。

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 :(得分:0)

,您不是在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();
    }

答案 1 :(得分:0)

有一些选择:

  1. 选择带有问题ID的元素后,您可以继续选择标签。 例如:
IWebElement RateQuestionElement = this.Driver.FindElement(By.Id(questionid)); 

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



RateQuestionLabel.click();

  1. 您可以使用CssSelector 例如:
myCssSelector = "#myQuestionId label"

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

RateQuestionElement.click();

我还没有尝试自己执行它,但是概念在那里

答案 2 :(得分:0)

尝试一下:

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