Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 元素无法位于(x,y):如何修复需要逐个单击的WebElement列表_Javascript_Java_Google Chrome_Selenium Webdriver - Fatal编程技术网

Javascript 元素无法位于(x,y):如何修复需要逐个单击的WebElement列表

Javascript 元素无法位于(x,y):如何修复需要逐个单击的WebElement列表,javascript,java,google-chrome,selenium-webdriver,Javascript,Java,Google Chrome,Selenium Webdriver,我被分配了一个项目,要求我从用户那里获取输入,从网站中获取输入并存储在数据库中,然后在后续请求中,使用机器学习重新排列保存在数据库中的所有数据,为用户提供基于其过去行为的选择 我要浏览的网站是TripAdvisor.it 我目前正在处理网页抓取部分,特别是,我正在通过从页面获取景点列表来填充我的数据库,然后分别单击每个景点,这样我就可以保存与每个景点相关的所有数据 我经常遇到错误“未知错误:元素在点(x,y)处不可单击;” 我想可能是javascript没有完全加载到tripadvisor页面上

我被分配了一个项目,要求我从用户那里获取输入,从网站中获取输入并存储在数据库中,然后在后续请求中,使用机器学习重新排列保存在数据库中的所有数据,为用户提供基于其过去行为的选择

我要浏览的网站是TripAdvisor.it

我目前正在处理网页抓取部分,特别是,我正在通过从页面获取景点列表来填充我的数据库,然后分别单击每个景点,这样我就可以保存与每个景点相关的所有数据

我经常遇到错误“未知错误:元素在点(x,y)处不可单击;”

我想可能是javascript没有完全加载到tripadvisor页面上的问题,所以我在这里调查了stackoverflow的各种可能性,并尝试添加一个显式等待,但它不起作用。 我尝试过的其他事情:

  • 睡眠(1000);我知道使用它不是一个好的实践,特别是在for循环中,我只是想强制程序等待,但它不起作用。我实际上用了3000毫秒
  • 一种检查js是否已完全加载到网页上的方法(我修改了在stackExchange上找到的一些代码,因为我对javascript不是很了解)。这是一个超时错误,我不确定这意味着什么
  • 使用ExpectedCondition
    .visibilityOf(WebElement元素)
    而不是
    .element可选择(WebElement elem)
    因为我意识到
    .getNumberOfElementsFound(driver,locator)
    方法实际上可以找到页面上的所有30个元素。我仍然收到相同的错误“元素无法定位在(x,y)…”
  • 以下是引发异常的代码:

    ...
        By locator = By.xpath("//a[contains(@class, 'attractions-attraction-overview-main-TopPOIs__name')]");
    
        int numberOfElementsFound = getNumberOfElementsFound(driver, locator);
    
        for (int pos = 0; pos < numberOfElementsFound; pos++) {
    
            WebDriverWait wait = new WebDriverWait(driver, 10);
            wait.until(ExpectedConditions.elementToBeClickable(getElementWithIndex(driver, locator, pos))).click();
            ...
        }
    
    。。。
    By locator=By.xpath(//a[contains(@class,'attractions-attraction-overview-main-TopPOIs\uu name'));
    int numberOfElementsFound=getNumberOfElementsFound(驱动程序、定位器);
    对于(int pos=0;pos
    下面是错误的完整信息:

    org.openqa.selenium.WebDriverException:未知错误:元素。。。在点(360、14)处不可单击。其他元素将收到单击:

    是指向我正在处理的实际网页的链接,如果有帮助的话

    我对javascript是罪魁祸首的评估正确吗?我的结论可能是,因为当我在实际页面上搜索标记“ui\u column wrap\u column responsive\u inline\u hidden label\u column”时,我找不到它


    我应该如何修复此错误?

    其他元素将收到单击错误的原因有很多;但一般来说,这是因为屏幕上添加了一些内容

    我的第一个猜测是,顶部导航的一个下拉菜单被触发,导致您试图单击的内容顶部出现覆盖

    我注意到,当我在顶部导航的“Firenze”上方悬停时,下拉菜单覆盖了“Gite di un giorno”图像的一部分。因此,如果在加载页面时,自动化系统认为光标位于“Firenze”上,则会出现下拉列表,自动化系统将单击下拉列表,而不是导致错误消息的图像

    如果是这样的话,在点击任何链接之前,你应该先做我称之为“clickOut”的方法。“clickOut”是一种一次性方法,只需单击
    标记即可。当屏幕上出现弹出窗口时,如果您在弹出窗口外单击,这些窗口将消失,它们非常有用。但在这种情况下,它实际上会移动光标,并导致任何下拉列表消失

    这是一个很长的机会,但我已经在建筑测试中见过很多次了