2

我正在使用 Selenium 2 (Webdriver) 对网页进行自动化测试。但是我想知道是否有办法使用 webdriver 框架从复选框列表中检查复选框?

我尝试了这段代码,但无济于事:

IWebElement box = ffDriver.FindElement(By.XPath("//*[@id='ctl00_ContentPlaceHolder1_Adde_div']"));
List<IWebElement> chkbox = box.FindElements(By.TagName("input"));
ffDriver.FindElement(By.Id("ctl00_ContentPlaceHolder1_Add_lstCategory_0"));         
//chkbox.g(2).click();
4

8 回答 8

5

如果您已经知道复选框的 id,您可以使用此方法单击选择它:

string checkboxXPath = "//input[contains(@id, 'lstCategory_0')]"
IWebElement elementToClick = driver.FindElement(By.XPath(checkboxXPath));
elementToClick.Click();

假设您在页面上有多个具有相似 ID 的复选框,您可能需要将“lstCategory_0”更改为更具体的内容。

这是用 C# 编写的,但适应其他语言应该不难。此外,如果您使用更多信息编辑您的帖子,我可以更好地微调这个示例。

让我知道这个是否奏效!


我已经访问了该站点并使用以下代码成功地与下拉小部件中的复选框进行了交互:

/** Set XPath Variables **/
string dropdownWidgetXPath = "//span[contains(@id, 'selInd')]";
string checkboxXPath = "//input[contains(@id, 'selInd')]";

/** Navigate to the page **/
driver.Navigate().GoToUrl("http://www.jobserve.com/us/en/Job-Search/");

/** Click the dropdown widget **/
IWebElement dropdownWidgetElement = driver.FindElement(By.XPath(dropdownWidgetXPath));
dropdownWidgetElement.Click();

/** Identify all checkboxes present **/
var allCheckboxes = driver.FindElements(By.XPath(checkboxXPath));

/** Click each checkbox and wait so that results are visible **/
foreach(IWebElement checkbox in allCheckboxes)
{
     checkbox.Click();
     System.Threading.Thread.Sleep(500);
}
于 2012-08-09T17:56:28.713 回答
1

在 Selenium webdriver 中,您可以这样做:

所有的复选框都必须有一些唯一的标识符,然后你可以简单地通过 Id 找到它或其他一些属性)。

然后你可以试试这个:

driver = new FirefoxDriver(); 
driver.findElement(By.xpath("//input[@name='mycheckboxgroup' and @title='movies']")).click();    
driver.findElement(By.xpath("//input[@name='mycheckboxgroup' and @title='songs']")).click();
于 2012-08-13T13:35:08.197 回答
0

通过复选框的 id,您可以使用以下代码:

IWebElement elementToClick = driver.FindElement(By.ID(ctl00_ContentPlaceHolder1_Add_lstCategory_0));
elementToClick.Click();

如果您不知道 id,请通过 xpath 使用以下代码:

String checkbox = "//input[@type='checkbox']"
IWebElement elementToClick = driver.FindElement(By.XPath(checkbox ));
elementToClick.Click();
于 2014-04-23T13:09:48.523 回答
0

里面的代码selenium很简单:

new WebDriverWait(driver, TimeSpan.FromSeconds(timeToHoldOn)).Until(ExpectedConditions.ElementExists((By.ClassName("ckb"))));
IWebElement dropdownWidgetElement = driver.FindElement(By.ClassName("ckb"));
dropdownWidgetElement.Click();
Thread.Sleep(1000);
var allCheckboxes = driver.FindElements(By.ClassName("ckb"));
foreach (IWebElement checkbox in allCheckboxes) {
  checkbox.Click();
  System.Threading.Thread.Sleep(250);
}
于 2015-02-17T14:42:57.367 回答
0

这就是我检查和取消选中所有框的方式,它必须有一个 ID 或类。

身份证示例:

driver.FindElement(By.Id("someid")).click();

类名示例:

driver.FindElement(By.ClassName("someid")).click();

它简短,甜蜜,更重要的是它有效。

于 2015-04-23T16:21:10.420 回答
0

尝试使用这段用java编写的代码

String checkboxes = "//*[@type='checkbox']";
List<WebElement> elementToClick = driver.findElements(By.xpath(checkboxes));
for (WebElement AllCheck : elementToClick) {
    AllCheck.click();
}
于 2016-10-04T06:42:52.423 回答
0

Java,使用循环一次单击多个复选框。

**Sample Xpath :**

CheckBox1 Xpath : //input[@class='mycheck' and @id='1']
CheckBox2 Xpath : //input[@class='mycheck' and @id='2']

使用 findelements 获取所有元素复选框:

List WebElement ele = driver.findElements(By.xpath("//input[@class='mycheck']"));

通过保留 ID 将 Xpath 设为字符串并将 ID 分配为 i。

for(int i=1; i<=ele.size(); i++) { driver.findElement(By.xpath("//input[@class='mycheck' and @id='" +  + i + "']")).click(); }

我获取每个循环的值,xpath 匹配复选框并单击它。

于 2017-11-10T14:03:49.800 回答
0

您可以通过选择包含它们的元素并像数组一样遍历每个单选按钮/复选框来选择每个单选按钮/复选框。

例如,这里的 ul 元素包含一些单选按钮。我先选择 ul 元素,然后我可以使用正确的索引(在 [] 内)选择每个收音机

 //Select the ul containing the radio buttons I want to click/select

   var ul = driver.FindElement(By.Id("ul_containing_radio_buttons"));

   //use forloop to click each button in turn         
   for (var i = 2; i <= 0; i--)
         {
            var button= ul.FindElements(By.TagName("input"))[i];
            //i is the index of the radio button in out ul element
            button.Click();
         }
于 2017-11-21T15:43:58.260 回答