gpt4 book ai didi

java - Selenium /火狐 : Command ".click()" doesn't work with a found element

转载 作者:IT老高 更新时间:2023-10-28 20:52:38 25 4
gpt4 key购买 nike

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

问题:我在 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">

我尝试了很多解决方案,有时它可以工作,但是下次我运行该程序时,它又不能工作了。

一些解决方案:

  1. 它找到元素,但不运行点击 Action 。我检查了 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")
  2. 我虽然是因为时间的关系,所以我试着这样解决。

    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();
  3. 最后,我有点绝望,我创建了一个新函数来尝试这样做将近 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);
    }
    }

有元素的图片:

Element 1 Element 2

有人知道怎么做吗?

最佳答案

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

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"));

关于java - Selenium /火狐 : Command ".click()" doesn't work with a found element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com