在使用Selenium Webdriver之前无法找到并单击复选框::

时间:2018-12-18 12:48:42

标签: java selenium xpath css-selectors webdriver

我正试图单击一个复选框,但一直单击链接“条款和条件”。虽然我的xpath(如下所述)在最小化的窗口上工作,但是在最大化窗口时无法单击该复选框,因为href(图像)出现在复选框旁边的第二行中。在单击最大化窗口上的复选框小部件时需要一些建议。我需要关注它。

有趣的是,当我将鼠标悬停在:: before(css选择器)上时,才突出显示小部件。

<div class="checkbox u-mar-bot-5">
  <div class="checkbox__container">
    <input class="checkbox__input" type="checkbox" id="basket-contact-terms" required data-parsley-multiple="basket-contact-terms" style>
<label class="checkbox__label checkbox__label--has-link checkbox__label--small" for="basket-contact-terms" style>
::before 
"I have read and agree to " <a class="text-link text-link--base text-link- small" href="/terms-conditions" target="_blank">Terms and Conditions</a>
    </label>
  </div>
</div>

图片:Terms and Conditions

我尝试了一些选项,但这些选项始终无法选中,因此链接“条款和条件”获得了点击。我一定缺少基本的东西。

driver.findElement(By.xpath("//label[@for='basket-contact-terms']")).click();
driver.findElement(By.xpath("//label[contains(@class,'checkbox__label checkbox__label--has-link checkbox__label--small')]")).click();

我确实环顾四周,发现有人建议使用此功能(如下),所以我尝试了但没用:

WebElement elem = driver.findElement(By.xpath("//div[contains(@class,'checkbox u-mar-bot-5')]"));
Actions action = new Actions(driver);
action.moveToElement(elem).click().build().perform();

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以尝试

WebElement elem = driver.findElement(By.id("basket-contact-terms"))

答案 1 :(得分:0)

由于您尝试了INPUT的ID并抛出了一个不可见的错误,因此我首先尝试等待它是否将变为可见。 (我假设它不会,但是值得一试)。

new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("basket-contact-terms"))).click();

如果这不起作用,我接下来将尝试单击元素上的其他位置。默认情况下,Selenium单击元素的中心。就您而言,我认为这就是问题所在。您可以使用Actions单击元素的左上角(1,1)。

WebElement label = driver.findElement(By.xpath("//label[@for='basket-contact-terms']"));
new Actions(driver).moveToElement(label, 1, 1).click().perform();