【问题标题】:Can't Select Checkbox, Selenium WebDriver无法选择复选框,Selenium WebDriver
【发布时间】:2017-11-10 03:17:16
【问题描述】:

我无法在 Java 中选择带有 Selenium WebDriver 的复选框。 我用 Xpath 试过,但没有结果。 WebDriver 无法单击元素。 我尝试使用 Selenium IDE - 记录器,没有结果。

这里是 - 复选框的 html 代码

我试试:

1.

driver.findElement(By.xpath(".//form[@id='placeOrderForm1']/div[@class='terms right']/label")).click();

2.

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

3.

driver.findElement(By.cssSelector("label")).click();

4.

driver.findElement(By.xpath("//div[3]/form/div/input")).click();

没有任何作用。 请帮忙。

【问题讨论】:

  • 乍一看,您似乎在点击标签,至少在案例 1 和 3 中是这样。
  • 可能是这个页面在框架内。请检查页面是否包含任何 iframe 标记。如果此复选框在框架内,则使用切换到框架方法并尝试查找元素。
  • 您收到错误消息了吗?
  • 给一些等待时间然后使用 driver.findElement(By.id("Terms1")).click();
  • 手动单击它并检查 html 中发生了什么变化)当您单击 id 复选框时 - 它什么也不做,或者您得到异常?哪一个?

标签: java html selenium xpath checkbox


【解决方案1】:

尝试使用JavascriptExecuter希望这会有所帮助

WebElement element = driver.findElement(By.id("Terms1"));
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].click();", element );

【讨论】:

  • 嗨。我得到 - org.openqa.selenium.WebDriverException: TypeError: can't access dead object 我被困在这里:/
【解决方案2】:

这是您问题的答案:

正如你提到的unable to select a checkbox,实际上我们没有选中复选框,我们checkmarkcheckbox。您所描绘的checkbox 有一个id 作为Terms1name astermsCheck`。因此,您可以使用任一定位器来选中复选框,如下所示:

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

element = driver.findElement(By.name("termsCheck")).click();

如果这能回答您的问题,请告诉我。

【讨论】:

  • 嗨。我试过了,但我得到了 ---- org.openqa.selenium.WebDriverException: TypeError: can't access dead object
  • @Machete 你能考虑展示你的作品吗?谢谢
【解决方案3】:

您的代码似乎正确。特别是这个-

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

您单击的元素可能在页面滚动中不可见。尝试先移动到该元素,然后单击。

试试这个 -

WebElement elem = driver.findElement(By.id("Term1"));
Actions action = new Actions(driver).
action.moveToElement(elem).click().build().perform();

希望对您有所帮助。

【讨论】:

  • 试试 driver.switchTo().defaultContent();在使用 findElement 之前。让我知道这是否有效。
  • 当焦点不在您要查找元素的框架上时,通常会出现此问题。如果您正在对其执行操作的元素在不同的框架上,则在找到元素之前先切换到该框架。
  • 是的! FINALLY.问题是他忽略了他的默认框架。
【解决方案4】:

您可以通过唯一标识符找到元素。在这种情况下,我们可以使用 name 或 id。更好的选择是使用 id。

WebElement element = driver.findElement(By.name("termsCheck"));
element.click();

或者你也可以使用这个

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

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 当然,我会补充的。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2020-04-25
  • 2023-03-13
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多