场景:我有4个按钮,每个按钮具有相同的标签,但不同的"值"如何选择同一标签下的某个按钮但具有一定值?
对于其他3个按钮与上面的相同,但是像Detached这样的不同文本是半分离的,例如,值=" 129"。
我如何选择值为128的上述按钮?
在单击某个按钮之前,这些按钮也不可见。我的脚本将始终单击此按钮以使这些按钮可见,但即便如此,我仍然无法通过右键单击并将它们复制到代码中使用简单的ID / CSSSelector / Xpath选择它们,它们不起作用。
我试过用这个:
[2]/label[@for='SelectedTypeOfPropertySecond']
但没有成功。
检验:
<div class="form-group mg-between property-type-two-follow-up" rdg-loading-indicator="suppress" style="">
<div class="row" data-toggle="buttons">
<div class="col-xs-6 col-md-4 btn-group">
<label for="SelectedTypeOfPropertySecond" class="btn btn-default btn-block ">
<input data-val="true" data-val-number="The field SelectedTypeOfPropertySecond must be a number." id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="radio" value="127">
Semi-Detached
</label>
</div>
<div class="col-xs-6 col-md-4 btn-group">
<label for="SelectedTypeOfPropertySecond" class="btn btn-default btn-block ">
<input id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="radio" value="128">
Detached
</label>
</div>
<div class="col-xs-6 col-md-4 btn-group">
<label for="SelectedTypeOfPropertySecond" class="btn btn-default btn-block ">
<input id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="radio" value="129">
Terraced
</label>
</div>
<div class="col-xs-6 col-md-4 btn-group">
<label for="SelectedTypeOfPropertySecond" class="btn btn-default btn-block ">
<input id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="radio" value="130">
Link-Detached
</label>
</div>
<div class="col-xs-6 col-md-4 btn-group">
<label for="SelectedTypeOfPropertySecond" class="btn btn-default btn-block ">
<input id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="radio" value="131">
Dorma
</label>
</div>
<input id="SelectedTypeOfPropertySecond" name="SelectedTypeOfPropertySecond" type="hidden" value="">
</div>
答案 0 :(得分:0)
您是否按名称和值尝试了XPath选择器?类似的东西:
//输入[@ name ='SelectedTypeOfPropertySecond'和@ value ='128']
此外,Selenium不会点击隐藏的元素。在你做了显示这些元素的任何动作之后,尝试引入一个类似Thread.Sleep(1000)的睡眠来给元素显示一些时间。
编辑:我同意下面的评论,等待一段固定的时间并不是最优雅的解决方案。您可以使用WebDriverWait,如下所示:
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 15));
var element = wait.Until(d => d.FindElement(By.XPath("//input[@name='SelectedTypeOfPropertySecond' and @value='128']")).Displayed);
我在那里使用了15秒超时,但是如果您希望元素显示超过15秒,则可以使用更高的值。
编辑2 :正如Metareven在他的评论中所说,当你得到你的驱动程序的实例时,你可以使用以下行来定义一个15秒的隐式等待,所以你只需定义一次:
driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 15);
每当你找到一个控件时,它将等待最多15秒。如果它还不可用。
答案 1 :(得分:0)
您应该可以使用这样的标准CSS选民:
"[value=<your value>]"
此外,如果您需要单击按钮以显示这些按钮,请记住在selenium会话中设置隐式等待值,以确保它等待超过0秒才能显示该元素