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

zag*_*000 0 java selenium xpath webdriver css-selectors

我试图单击一个复选框,但它一直在单击“条款和条件”链接。虽然我的 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>
Run Code Online (Sandbox Code Playgroud)

图片:条款和条件

我尝试了几个选项,但始终无法选中该框,而是点击了“条款和条件”链接。我一定缺少一些基本的东西。

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();
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

Jef*_*ffC 5

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

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

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

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

  • 太棒了@JeffC!我使用了左上角(1,1)的建议,效果非常好。是的,我的问题是基于窗口大小以及元素的显示方式,在我的情况下,锚文本位于其中心。非常感谢。 (3认同)