Selenium无法单击特定复选框

时间:2017-09-16 11:48:45

标签: java html selenium xpath checkbox

嗨,大家好,所以我是Selenium / Java / HTML的亲戚(阅读:完整的)新手,如果我问的话显而易见道歉。 我需要的是能够

  1. 点击特定复选框1和
  2. 如果选中特定复选框2,则取消选中
  3. 这是网站HTML:

    特定复选框1

    <div class="checkbox">
        <label id="agree_to_terms_label" for="agree_to_terms_join" class="visible">
          <input id="agree_to_terms_join" name="agree_to_terms" type="checkbox" data-required="true" data-required-message="You need to agree to the *** Account Holder agreement" data-change="" class="parsley-validated">
          <span class="left-block"></span>
          I have read, understand and agree to the <a href="/terms-and-conditions/" target="_blank">*** Account Holder Agreement</a>
          and acknowledge <a href="/privacy-policy" target="_blank">*** Privacy Policy</a>
          <input type="hidden" name="agree_to_terms" value="yes">
        </label>
      </div>
    

    特定复选框2:

    <div class="checkbox">
        <label id="agree_to_offers_label" for="agree_to_offers" class="visible">
          <span class="left-block">
             <input id="agree_to_offers" name="agree_to_offers" type="checkbox" data-required-message="" data-change="" checked="checked" value="yes">
            <span>By joining *** you'll be notified of exclusive offers and account updates via email</span>
          </span>
        </label>
      </div>
    

    我没有成功的尝试:

    Xpath的:

    driver.findElement(By.xpath("//input[@id='agree_to_terms_join' and @type='checkbox']")).click();
    

    元素不可见

    driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label")).click();
    

    点击div中的href超链接

    driver.findElement(By.xpath("//*[@id='agree_to_terms_label']/input")).click();
    

    元素不可见

    CSS:

    driver.findElement(By.cssSelector("input[id = 'agree_to_terms_join'][type = 'checkbox']")).click();
    

    元素不可见

    by.className:

    driver.findElement(By.className("checkbox")).click();
    

    打开超链接

    我浏览了一下论坛,看到了被隐藏的元素的提及 - 但是我无法发现任何iframe或其他似乎隐藏着这个bugger的东西?

    非常感谢任何帮助!!

3 个答案:

答案 0 :(得分:1)

点击的确切元素是&#34; ::之前&#34;这是一个伪元素。我想你需要使用Javascript。下面的代码应该适合你

WebElement element1 = driver.findElement(By.cssSelector(".left-block"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element1);

答案 1 :(得分:0)

试试这个:

WebDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.quidco.com/join-quidco/");          
driver.findElement(By.xpath(".//label[@id='agree_to_terms_label']")).click();         
driver.findElement(By.xpath(".//label[@id='agree_to_offers_label']")).click();

如果有必要,可以使用隐式或显式等待

答案 2 :(得分:0)

尝试以下:

WebElement yourChkBox  = driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label"));

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOf(yourChkBox));

Actions act = new Actions(driver);
act.moveToElement(yourChkBox).click().build().perform();

<强>更新

或者尝试使用javascriptexecutor,如下所示:

WebElement yourChkBox  = driver.findElement(By.xpath("//*[@id='agree_to_terms_join']/parent::label"));

JavascriptExecutor js = (JavascriptExecutor) driver;        
js.executeScript("arguments[0].setAttribute('value', 'Yes');", yourChkBox  );