【问题标题】:How to find proper checkbox locator如何找到合适的复选框定位器
【发布时间】:2019-02-03 07:57:06
【问题描述】:

我正在用 Selenium 编写一个自动测试,但我的定位器有问题。网址:https://talixo.pl/register/?next=/。我找不到最后三个复选框的正确定位器。根据我使用的定位器,我得到一个错误'元素不可交互或复选框被勾选,但在新选项卡中打开链接“阅读更多”下的页面。没有“阅读更多”链接的复选框我没有这个问题请帮助!

public void clickDiscountsCheckBox(){
        WebElement discountsCheckBox = driver
                                       .findElement(By.xpath("//*[@id=\"id_terms_0\"]"));
        discountsCheckBox.click();

这是我得到的错误:

org.openqa.selenium.ElementNotVisibleException:元素不可交互 (会话信息:chrome=71.0.3578.98) (驱动程序信息:chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 10.0.17134 x86_64)(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:0 毫秒

【问题讨论】:

  • 为什么要使用 XPath 仅通过 ID 来定位元素?为什么不使用By.id("id_terms_0")?另外,您是否尝试过等待可点击?

标签: java selenium checkbox


【解决方案1】:

试试这个。这应该可以工作。

driver.get("https://talixo.pl/register/?next=/");
            Thread.sleep(4000);
            List<WebElement> listOfElements = 
driver.findElements(By.xpath("//span[@class='label-body']"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
for (int i=0; i<listOfElements.size();i++){
               executor.executeScript("arguments[0].click();",listOfElements.get(i));               
              }

如果这行得通,请告诉我。

【讨论】:

  • 这应该点击 3 个“阅读更多”复选框。
  • 太棒了!如果您需要任何进一步的帮助,请告诉我。
  • 我知道你现在不能给我投票。有机会请给我投票,这样我会更有兴趣解决这个论坛的问题。
  • 我不知道。将来我会的。
  • Thread.sleep() 是一种不好的做法,不应使用。当可以通过正常方式单击复选框时,您还应该避免使用 JSE 单击复选框。当您使用 JSE 与页面进行交互时,您需要意识到您不再以用户的身份行事。 JSE 可以单击或以其他方式与页面交互,而用户无法...单击不可见或被遮挡的元素等。
【解决方案2】:

我访问了提供的 URL 并观察到最后三个要单击的复选框是“::before”,它是一个伪元素。你试过JavascriptExecutor吗?您可以尝试使用 CSSSelector 来识别元素。

【讨论】:

  • 感谢您的建议,但不幸的是它也不起作用:(
猜你喜欢
  • 1970-01-01
  • 2016-07-19
  • 2021-03-27
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多