如何使用selenium自动化复选框,其check元素显示为label :: before?

时间:2018-01-21 20:45:42

标签: selenium-webdriver

Checkbox-to be automated

上面是要自动化的复选框的图片,在检查时将元素名称显示为label :: before。使用id或name只会打开一些其他链接。关于使用Selenium - Java选择复选框,请帮忙。

2 个答案:

答案 0 :(得分:1)

您正在尝试单击错误的元素。您要点击的元素是上面的<input name="term1" id="term1" type="checkbox">

term1

您只需使用ID driver.findElement(By.id("term1")).click(); 即可完成此操作。

{{1}}

答案 1 :(得分:0)

我使用复选框的经验是,您必须单击复选框旁边的标签来设置它们。单击输入将导致OpenQA.Selenium.ElementNotVisibleException异常。您可以通过Element.Selected(C#)或Element.isSelected(Java)获取复选框的状态,但您无法像点击它那样与其进行交互。

你可以通过XPath找到标签&#34; //标签[包含(text(),&#39;同意我们的&#39;)]#34;或者使用&#34; //标签的属性[包含(@ for,&#39; term1&#39;)]&#34;

&#34;使用条款&#34;通过使用动作类可以避免链接打开,使用xoffset = 1和yoffset = 1将点击精确定位在标签的左上角。这种精确定位是必要的,因为在HTML中,锚标记嵌套在标签内标签。我在你的网站上尝试了这个代码,它给出了正确的结果。

在C#中,使用PageObject / PageFactory解决方案将是:

public class TestPage
{
    private readonly IWebDriver _driver;

    public  TestPage(IWebDriver driver)
    {
        _driver = driver;
        PageFactory.InitElements(driver, this);
    }

    [FindsBy(How = How.XPath, Using = "//label[contains(text(),'Agree to our')]")]
    private IWebElement _labelInputCheckbox;

    public void ClickLabelInputCheckbox()
    {
        var action = new OpenQA.Selenium.Interactions.Actions(_driver);
        action.MoveToElement(_labelInputCheckbox,1,1).Click();
        action.Perform();
    }
}