如何使用Selenium WebDriver和C#单击该复选框
我要做的是点击(或关闭)我页面上的任何复选框。 从HTML中可以看出,每个复选框元素看起来都有一个唯一的标识符,但是当我尝试点击它时,我得到一个“未找到元素”exception。 我已经尝试了所有标准定位器(也没有iframe) – 我可以找到复选框元素确定但是无法点击它。
请查看以下HTML:
我可以单击任何复选框元素的唯一方法是找到以下元素:
使用Xpath定位器:
ie //*[@id="toggle_undefined"]
在这种情况下会触发click事件,但显然只会点击页面上的第一个元素(或本例中的复选框)(我在页面上有超过20个复选框)。
基于上面的HTML代码,假设我想在第二行启用第二个复选框元素。 以下是此复选框元素的代码:
根据上面的信息,我只能通过查找并单击以下元素来单击该复选框:
我该如何为这个元素创建一个独特的xpath定位器,我可以用来点击我页面上的任何复选框?
因为您需要单击SPAN,例如
并且它上面没有唯一的标识符/属性,我们必须使用其中一个周围的元素找到正确的标识符/属性。
可能我会使用的是通过相对LABEL找到SPAN,例如
你可以像使用XPath一样
//label[.='Option 3']//following::span[@id='toggle_undefined']
这样做是找到包含所需字符串“LAB3”的LABEL,然后找到后面带有ID“toggle_undefined”的第一个SPAN。
如果是我,我会将它包装在一个函数中并传入我想要点击的选项名称,例如
public void Toggle(string optionName) { Driver.Value.FindElement(By.XPath($"//label[.='{optionName}']//following::span[@id='toggle_undefined']")).Click(); }
并称之为
Toggle("Option 3");
使用以下CSS选择器:
.url-field-toggle[data-yesno-name='Url_Transaction_Out']
代码是:
driver.FindElement(By.CssSelector("url-field-toggle[data-yesno-name='Url_Transaction_Out']")).Click();
希望它能帮到你!
要获取类型复选框的输入,只需使用下面的css选择器。
元件:
Css选择器:
input[data-yesno-name='Url_Transaction_Out']
码:
driver.FindElement(By.CssSelector("input[data-yesno-name='Url_Transaction_Out']")).Click();
要检查并选择:
IWebElement checkbox = driver.FindElement(By.CssSelector("input[data-yesno-name='Url_Transaction_Out']")); if(!checkbox.IsSelected()) { checkbox.Click(); }
根据您共享的HTML来调用所需复选框上的click()
,您可以使用以下任一解决方案:
-
CssSelector
:driver.FindElement(By.CssSelector("label[for=Url_Transaction_Out]")).Click();
-
XPath
:driver.FindElement(By.XPath("//label[@for='Url_Transaction_Out']")).Click();