单击Selenium中具有相同标签的按钮

时间:2018-04-30 14:07:06

标签: c# selenium selenium-webdriver

场景:我有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>

2 个答案:

答案 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秒才能显示该元素