关于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中出现问题时解决此问题的最佳方法是什么?
答案 0 :(得分:4)
这种情况发生在以下情况 -
当元素加载到DOM中,但位置不是 修复了UI。可能有一些其他div或图像不是 完全装满。
页面在点击元素之前会刷新。
解决方法
我遇到了同样的问题,页面加载时间更长,整个网页上的加载图标重叠。
要修复它,我已经实现了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,它成了一个问题。
答案 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;
}