如何使用id / xpath检查复选框。有没有类似于selecttext by selecttext的方法。
通过给出所有其他相关问题的示例,我找不到一个简洁的方法,通过几行或方法我可以检查chekbox或单选按钮。
任何帮助将不胜感激。
示例HTML部分如下:
<tbody>
<tr>
<td>
<span class="120927">
<input id="ctl00_CM_ctl01_chkOptions_0" type="checkbox" name="ctl00$CM$ctl01$chkOptions$0"/>
<label for="ctl00_CM_ctl01_chkOptions_0">housingmoves</label>
</span>
</td>
</tr>
<tr>
<td>
<span class="120928">
<input id="ctl00_CM_ctl01_chkOptions_1" type="checkbox" name="ctl00$CM$ctl01$chkOptions$1"/>
<label for="ctl00_CM_ctl01_chkOptions_1">Seaside & Country Homes</label>
</span>
</td>
</tr>
</tbody>
答案 0 :(得分:61)
选中复选框与单击按钮类似。
driver.findElement(By.id("idOfTheElement")).click();
会做的。
但是,您还可以查看是否已选中该复选框。以下代码段检查是否选中了复选框。如果未选中,则选择。
if ( !driver.findElement(By.id("idOfTheElement")).isSelected() )
{
driver.findElement(By.id("idOfTheElement")).click();
}
答案 1 :(得分:23)
我意识到这个问题已经持续了几个月,但我刚刚找到它并且遇到了同样的问题,并找到了解决方案。似乎IE驱动程序不会像其他驱动程序那样与所有内容交互,而复选框就是其中一种情况。
复选框的技巧是发送Space键而不是使用click(只需要在IE上),就像在C#中一样:
if (driver.Capabilities.BrowserName.Equals(“internet explorer"))
driver.findElement(By.id("idOfTheElement").SendKeys(Keys.Space);
else
driver.findElement(By.id("idOfTheElement").Click();
答案 2 :(得分:3)
如果您想立即点击所有复选框,可以执行以下方法:
private void ClickAllCheckboxes()
{
foreach (IWebElement e in driver.FindElements(By.xpath("//input[@type='checkbox']")))
{
if(!e.Selected)
e.Click();
}
}
答案 3 :(得分:3)
C#的解决方案
try
{
IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal));
if (!TargetElement.Selected)
{
TargetElement.SendKeys(Keys.Space);
}
}
catch (Exception e)
{
}
答案 4 :(得分:2)
获取'Seaside&amp; amp;的复选框Country Homes',使用此XPath:
//label[text()='Seaside & Country Homes']/preceding-sibling::input[@type='checkbox']
要获取“housingmoves”的复选框,请使用此XPath:
//label[text()='housingmoves']/preceding-sibling::input[@type='checkbox']
这里的原则是使用您想要的文本获取标签,然后获取之前标签的复选框,因为这似乎是HTML布局的方式。
要获取所有复选框,您可以稍微高一点然后继续工作,这就是说获取表格,然后获取范围内的任何复选框:
//table/descendant::span/input[@type='checkbox']
答案 5 :(得分:1)
您可以使用以下代码:
List<WebElement> checkbox = driver.findElements(By.name("vehicle"));
((WebElement) checkbox.get(0)).click();
我的HTML代码如下:
<.input type="checkbox" name="vehicle" value="Bike">I have a bike<br />
<.input type="checkbox" name="vehicle" value="Car">I have a car <br />
答案 6 :(得分:1)
使用WebDriver和C#的解决方案如下。关键的想法是从标签''for'属性中获取复选框的ID,并使用它来标识复选框。
只有在需要更改时,代码才会设置复选框状态。
public void SetCheckboxStatus(string value, bool toCheck)
{
//get the label containing the checkbox state
IWebElement labelElement = this.Driver.FindElement(By.XPath(string.Format("//label[.='{0}']",value)));
string checkboxId = labelElement.GetAttribute("for");
IWebElement checkbox = this.Driver.FindElement(By.Id(checkboxId));
if (toCheck != checkbox.Selected)
{
checkbox.Click();
}
}
答案 7 :(得分:1)
这可以帮助 -
IWebElement elementToClick = driver.findElement(By.xpath(""//input[contains(@id, 'lstCategory_0')]"));
elementToClick.Click();
你也可以传递id。 如果您需要类似可见文本的内容,则可以按名称“查找元素”(如果它们有名称)。
答案 8 :(得分:0)
运行此方法实际上会切换复选框; java / Selenium2中的.isSelected()
显然总是返回false
[至少使用我测试过的java / selenium / Firefox版本]。
选择正确的复选框不是问题所在 - 而是正确区分初始状态,不必要地重新点击已经选中的复选框。
答案 9 :(得分:0)
要选中复选框,请使用"WebElement"
课程。要在下拉列表中操作,请使用"Select"
类。
答案 10 :(得分:0)
第1步: 应该在这里使用的对象定位器是XPath。因此,为这两个复选框导出XPath。
String housingmoves="//label[contains(text(),'housingmoves')]/preceding-sibling::input";
String season_country_homes="//label[contains(text(),'Seaside & Country Homes')]/preceding-sibling::input";
第2步:
执行单击复选框
driver.findElement(By.xpath(housingmoves)).click();
driver.findElement(By.xpath(season_country_homes)).click();
答案 11 :(得分:0)
部分匹配请执行以下操作
getDriver().findElement(By.cssSelector("<tag name>[id*='id pattern to look for']")).click();
答案 12 :(得分:0)
这是Scott Crowe的答案的C#版本。我发现IEDriver和ChromeDriver都回复了发送Key.Space而不是单击复选框。
if (((RemoteWebDriver)driver).Capabilities.BrowserName == "firefox")
{
// Firefox
driver.FindElement(By.Id("idOfTheElement")).Click();
}
else
{
// Chrome and IE
driver.FindElement(By.Id("idOfTheElement")).SendKeys(Keys.Space);
}
感谢斯科特给我的正确方向。
答案 13 :(得分:0)
也许是一个很好的起点:
String date = "Fri Sep 25 10:38:42 IST 2015";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy", Locale.ENGLISH);
SimpleDateFormat newsdf =new SimpleDateFormat("YYYY-MM-dd");
答案 14 :(得分:0)
我发现有时JavaScript不允许我点击该复选框,因为onchange
事件正在使用该元素。
这句话有助于我解决问题:
driver.findElement(By.xpath(".//*[@id='theID']")).sendKeys(Keys.SPACE);
答案 15 :(得分:0)
我尝试了各种方法,但没有任何效果。我一直在&#34;无法点击元素&#34;或ElementNotVisibleException。我能够找到输入但无法检查。现在,我点击包含复选框的div,它可以使用以下HTML(基于bootstrap的CSS)。
@foreach (var item in Model)
{
<tr>
<td>
<div id="@item.Id" class="checkbox">
<label><input type="checkbox" class="selectone" value="@item.Id"></label>
</div>
</td>
<td val="@item.Id">
@item.Detail
</td>
<td>
<div>@item.Desc
</div>
</td>
<td>
@Html.ActionLink("Edit", "Create", new { EditId = item.Id })
</td>
</tr>
}
这是WebDriver的代码
var table = driver.FindElement(By.TagName("table"));
var tds = table.FindElements(By.TagName("td"));
var itemTds = tds.Where(t => t.Text == itemtocheck);
foreach (var td in itemTds)
{
var CheckBoxTd = tds[tds.IndexOf(td) - 1];
var val = td.GetAttribute("val");
CheckBoxTd.FindElement(By.Id(val)).Click();
}
在这种方法中,我将项目ID作为div的id,并为该id添加td的属性。一旦我找到需要检查的项目的td,我就可以在该td之前找到div并单击它。我们也可以使用之前支持的xpath查询(这里是示例http://learn-automation.com/how-to-write-dynamic-xpath-in-selenium/)。
答案 16 :(得分:0)
下面的代码将首先获取页面中的所有复选框,然后取消选中所有选中的复选框。
List<WebElement> allCheckbox = driver.findElements(By
.xpath("//input[@type='checkbox']"));
for (WebElement ele : allCheckbox) {
if (ele.isSelected()) {
ele.click();
}
}