【问题标题】:Unable to locate and click checkbox ::before using Selenium Webdriver在使用 Selenium Webdriver 之前无法找到并单击复选框::
【发布时间】:2019-05-18 21:23:45
【问题描述】:

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

任何建议将不胜感激。

【问题讨论】:

  • 试试driver.findElement(By.id("basket-contact-terms")).click();
  • 谢谢@Andersson,我已经尝试了你的建议以及“//input[@id='basket-contact-terms']”,对于这两个我都得到了'org.openqa.selenium。 ElementNotVisibleException:元素不可见'异常。两者都是有效的选择器模式,但它不是我检查时需要的。

标签: java selenium xpath css-selectors webdriver


【解决方案1】:

你可以试试

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

【讨论】:

  • 感谢@Govind。安德森在上面提出了同样的建议。我已经尝试过了,但没有运气。
【解决方案2】:

由于您尝试了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();

【讨论】:

  • 优秀的@JeffC!我使用了左上角 (1,1) 的建议,效果很好。是的,我的问题是基于窗口大小和元素的显示方式,在我的情况下,锚文本位于它的中心。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2022-12-05
  • 2016-04-29
  • 1970-01-01
  • 2018-04-24
  • 2021-12-23
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多