【问题标题】:How to automate a checkbox using selenium whose inspection element is shown as label::before? [duplicate]如何使用 selenium 自动化复选框,其检查元素显示为 label::before? [复制]
【发布时间】:2018-01-21 20:45:41
【问题描述】:

Checkbox-to be automated

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

【问题讨论】:

  • 你有什么问题?您在寻找元素的 xpath 吗?
  • 即使在使用元素 xpath 时,它也会打开一个链接。我想点击 label::before 或获取 label::before 的 xpath
  • 在图片中,您聚焦错误的元素。我相信您希望点击 id=term1 的元素
  • 是的,id 是 term1,但点击 term1 会打开“使用条款”。
  • 让我检查一下

标签: selenium-webdriver


【解决方案1】:

您正试图单击错误的元素。您要点击的元素是正上方的INPUT

<input name="term1" id="term1" type="checkbox">

您只需使用 ID term1 即可做到这一点。

driver.findElement(By.id("term1")).click();

【讨论】:

    【解决方案2】:

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

    您可以通过 XPath 使用文本 "//label[contains(text(),'Agree to our')]" 或使用 "//label[contains(@for,'term1' )]"

    可以避免“使用条款”链接打开的问题,方法是使用 Action Class 使用 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多