Firefox中的Selenium“Element is not clickable at point”错误

时间:2016-04-19 22:52:27

标签: firefox selenium-webdriver webdriver

关于Webdriver错误

Element is not clickable at point (X, Y). Another element would recieve the click instead.

对于ChromeDriver,这是在Debugging "Element is not clickable at point" error处理的,但Firefox中也会出现此问题。

在FirefoxDriver中出现问题时解决此问题的最佳方法是什么?

8 个答案:

答案 0 :(得分:4)

这种情况发生在以下情况 -

  • 当元素加载到DOM中,但位置不是 修复了UI。可能有一些其他div或图像不是 完全装满。

  • 页面在点击元素之前会刷新。

解决方法

  • 在对UI中的每个Web元素执行操作之前使用Thread.sleep,但确实如此 不是个好主意。
  • 使用WebDriverWait ExpectedConditions。

我遇到了同样的问题,页面加载时间更长,整个网页上的加载图标重叠。

要修复它,我已经实现了WebDriverWait ExpectedConditions,它等待加载图标在元素上执行点击操作之前消失

在执行操作之前调用此函数(我使用的是数据驱动框架)

public void waitForLoader () throws Exception  {
  try {
   String ObjectArray[]=ObjectReader.getObjectArray("LoadingIcon"); 
    if(checkElementDisplayed(ObjectArray[3],ObjectArray[2]))
    {
     WebDriverWait wait = new WebDriverWait(remotewebdriver,10); 
     wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(ObjectArray[3])));
    }
   } catch (NoSuchElementException e) {
   System.out.println("The page is loaded successfully");
   }
  }

答案 1 :(得分:3)

我的同样问题通过Javascript解决,请尝试使用以下代码而不是硒点击

WebElement rateElement = driver.findElement(By.xpath(xpathContenRatingTab));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", rateElement);

答案 2 :(得分:3)

如果您的问题是元素从屏幕滚动(并且因此在标题栏之类的内容下滚动),您可以尝试将其滚动到视图中,如下所示:

private void scrollToElementAndClick(WebElement element) { 
int yScrollPosition = element.getLocation().getY(); 
js.executeScript("window.scroll(0, " + yScrollPosition + ");"); 
element.click(); }

如果需要,还可以添加静态偏移量(例如,如果页面标题高200像素且始终显示):

public static final int HEADER_OFFSET = 200; 
private void scrollToElementAndClick(WebElement element) { 
int yScrollPosition = element.getLocation().getY() - HEADER-OFFSET; 
js.executeScript("window.scroll(0, " + yScrollPosition + ");"); 
element.click(); 
}

您可以使用JavascriptExecutor(不推荐)

直接点击
WebElement element= driver.findElement(By."Your Locator"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);

希望它会对你有所帮助:)。

答案 3 :(得分:2)

Selenium jar版本与Firefox版本的精心匹配可以解决问题。如果元素不在页面上,Selenium应自动将元素滚动到视图中。使用JavaScript强制元素进入视图是不必要的。

我们从未在 Firefox 31.5.0中使用selenium-server-standalone-2.44.0.jar 看到此问题,但是在使用selenium升级到Firefox 38.7.0时-server-standalone-2.52.0.jar,它成了一个问题。

请参阅https://github.com/seleniumhq/selenium/issues/1543

答案 4 :(得分:2)

我有同样的问题,我使用某些功能解决了它。在使用FirefoxDriver时,可以将“overlapCheckDisabled”设置为 true 来解决问题。

\bhttps?:\/\/\S*?\/[^\/.]+\.(jpg|png)\b

答案 5 :(得分:1)

ActionBuilder可以解决错误。有时在对象前面还有另一个需要单击的元素,因此在传统点击失败的情况下,单击ActionBuilder单元的位置可能会有效

    Actions actions = new Actions(driver);
    actions.moveToElement(clickElement).click().perform();

或尝试元素的中间

    Actions actions = new Actions(driver);
    Integer iBottom = clickElement.getSize().height;
    Integer iRight = clickElement.getSize().width;
    actions.moveToElement(clickElement, iRight/2, iBottom/2).click().perform();

答案 6 :(得分:1)

例如当您对某项服务进行多次访问时(例如,如果您使我成为机器人的话),则会发生此错误。例如,如果您将u标记为已阻止,则instagram将阻止您一段时间。错误代码提示您不允许您单击页面中的某些元素。

尝试重新注册一个帐户,然后切换到VPN,因为您的IP已被标记为已阻止

答案 7 :(得分:0)

在使用大于1024x768的分辨率时,请尝试最大化浏览器。它在js中对我有用。

#include <stdio.h>

int main()
{   
    int i; // loop counter 
    int size; // size of arry  
    int input[20];
    printf("enter text here\n");  

    while((input[i] = getchar()) != '\n') // input text to the arry
    {
        if(input[i]=='c' && input[i+1]=='a' && input[i+2]=='t') // switching characters
        {
            input[i]='d'; input[i+1]='o'; input[i+2]='g'; 
        }

        i++; 
        size++;  
    }

    i=0; // reset for next loop

    while(i <= size) // printing the text out ofthe arry 
    {
         putchar(input[i]); 
         i++;
    }

    printf("\n"); 
    return 0;
}