为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
青春有我 2021-05-07 13:12:01
方案:我有4个按钮,每个按钮具有相同的标签,但具有不同的“值”,如何选择相同标签但具有特定值的某个按钮?对于其他3个按钮,它们与上面的按钮相同,但仅文本不同,例如Detached是Semi-Detached,而值=“ 129”。例如,如何选择上述值为128的按钮?在单击某个按钮之前,这些按钮也不可见。我的脚本将始终单击该按钮以使这些按钮可见,但即使如此,我仍然无法通过右键单击并将它们复制到代码中的方式使用简单的ID / CSSSelector / Xpath来选择它们。iv尝试使用此:[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>
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

您是否已按名称和值尝试过XPath选择器?就像是:

// input [@ 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秒。


查看完整回答
反对 回复 2021-05-21
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您应该能够使用如下所示的标准CSS选举人:

"[value=<your value>]"

另外,如果您需要单击按钮以显示这些元素,只需记住在硒会话中设置隐式等待值,以确保它将等待0秒钟以上才能显示该元素


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信