我有一个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();
}
问题是只有标签是可单击的,因此我需要从输入字段中选择标签,我该怎么做?
答案 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)
有一些选择:
IWebElement RateQuestionElement = this.Driver.FindElement(By.Id(questionid));
IWebElement RateQuestionLabel = RateQuestionElement.FindElement(By.Css("label"));
RateQuestionLabel.click();
或
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
。