如何使用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();