当前位置: 首页 > 知识库问答 >
问题:

硒/火狐:命令“.click()”不适用于找到的元素

龚征
2023-03-14

我试图找到解决这个问题的方法,我花了很多时间,但这对我来说几乎是不可能的。

问题:我在Firefox中使用Selenium和Java。我需要找到一个元素(列表框)并点击它。因此,代码找到元素,但单击操作不起作用。它在Google Chrome中每次都能很好地工作,只是有时在Firefox中(使用相同的Java代码有时工作,有时不工作)。

当程序进入页面时,有一部分代码包含元素:

    <div id="size-btn" class="size-btn">
      <span class="selected-size">SELECCIONA TALLA </span>
      <div class="size-select" style="display: none;">
        <table>
          <tbody>
            <tr id="selecsize_2" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051607">
            <tr id="selecsize_3" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051608">
            <tr id="selecsize_4" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051609">
            <tr id="selecsize_5" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051610">
          </tbody>
        </table>
      <button class="size-guide gaViewEvent gaTrack" data-ga-props="{action:'Seleccionar_Talla', opt_label:'Guia_de_tallas'}" data-href="http://www.anyweb.com/webapp/wcs/stores/servlet/ProductGuideSizeAjaxView?catalogId=24052&categoryId=358056&langId=-5&productId=1047599&storeId=10701">Guía de tallas</button>
      </div>
    </div>

还有一部分代码在单击元素时会发生变化:

    <div id="size-btn" class="size-btn opened">

我尝试了许多解决方案,有时很有效,但下一次运行该程序时,它不再有效。

一些解决方案:

>

  • 它找到元素,但不运行单击操作。我检查了xpath和cssSelector,发现这些表达式有唯一的元素。

    driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")).click(); // Also checked with By.cssSelector("span.selected-size")
    

    我想这是因为时间的原因,所以我试图用这种方式解决它。

    WebElement we = driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")); // By.cssSelector("span.selected-size")
    Thread.sleep(3000);
    we.click();
    

    最后,我有点绝望,我创建了一个新函数来尝试这样做近60次,寻找元素代码上的更改,如果有任何更改,只是尝试再次执行单击操作。

    clickAndWaitWhileElementIsNotPresent(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span"),By.xpath("//div[@class='size-btn opened']/span")); // By.cssSelector("span.selected-size")
    
    private void clickAndWaitWhileElementIsNotPresent(By by1, By by2) throws Exception {
        for (int second = 0;; second++) {
            if (second >= 60)
                fail("timeout");
            try {
                if (isElementPresent(by2))
                {
                    break;
                }
                else
                {
                    driver.findElement(by1).click();
                }
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }
    }
    

    这是元素的图像:

    有人知道怎么做吗?

  • 共有3个答案

    范华清
    2023-03-14

    我在Firefox中也有同样的问题。技巧是点击按钮内部的文本,而不是按钮本身。

    鲜于温书
    2023-03-14

    我不确定你为什么使用这个Xpath,如果你有自由改变Xpath,然后使用硒IDE记录元素,并使用Xpath::p目标下拉列表中组织(它选择相对于html标头的唯一路径),它将解决动态定位器的问题。并尝试下面提到的事件。

    1-使用<code>单击<code>。

    2-使用<code>fireevent(焦点)

    3-使用< code > mouse vertically 。

    汪德明
    2023-03-14

    最后,我找到了一个适用于Firefox和GoogleChrome的答案。

    WebElement we = this.driver.findElement(By.id("size-btn"));
    
    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor.executeScript("arguments[0].click();", we);
    
    waitForElementPresent(By.xpath("//div[@id='size-btn' and contains(@class,'opened')]/span"));
    
     类似资料:
    • 我在服务器上运行硒,我希望它在客户端上显示浏览器。我已经在我的服务器上启动了xvfb,如下所示: 然后在我的Java代码上我写道: 但当我启动时,我有一个例外: Selenium的版本是2.47.1,firefox的版本是33.0。

    • 任何提示都会很有帮助!

    • 大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。

    • 我正在做一个与运行时间有关的练习。exec(),我理解这个运行时。exec不是shell解释器,这就是为什么我执行“bash-c'command'”,但出于某种原因,我可以执行像ls这样的命令,但不能执行echo或重定向或多个命令。这些都不起作用: 这是我的java代码: 我使用以下语法运行上述命令: 这是有效的: 我在Ubuntu 20.04和zsh上使用openjdk 11.0.15。有人能告

    • 根据< code>window_handles文档: 窗口句柄(_H) 返回当前会话中所有窗口的句柄。 但是,在打开一个新选项卡后,我无法在列表中看到新句柄: 如您所见,具有相同的值,但我看到浏览器中打开了 2 个选项卡。是我做错了什么吗?如果是,我应该如何获取新选项卡的句柄? 使用: 硒 2.44.0 (最新) 火狐 35.0 (最新) 蟒蛇 2.7.6 请注意,如果我在Chrome中做类似的事

    • 我已经安装了使用: 当我尝试使用命令时,例如: 我得到了zsh错误: 未找到命令:rasa错误 我在Mac OS Catalina上,使用: Python version Python3 version pip version 我的变量如下所示: