【问题标题】:Element could not be located at (x,y): how to fix for a list of WebElements that need to be clicked one by one元素无法位于 (x,y):如何修复需要一一点击的 WebElement 列表
【发布时间】:2019-05-06 17:34:55
【问题描述】:

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

我要抓取的网站是 TripAdvisor.it。

我目前正在研究网络抓取部分,特别是,我正在通过从页面获取景点列表来填充我的数据库,然后分别单击它们中的每一个,这样我就可以保存与每个景点。

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

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

  1. Thread.sleep(1000);我知道使用它不是一个好习惯,尤其是在 for 循环中,我只是想强制程序等待,但它没有用。我实际上用了 3000 毫秒。
  2. 一种检查 js 是否已完全加载到网页上的方法(我改编了我在 stackExchange 上找到的一些代码,因为我对 javascript 不是很了解)。这给出了超时错误,我不太确定这意味着什么。
  3. 使用 ExpectedCondition .visibilityOf(WebElement elem); 而不是 .elementToBeClickable(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();
        ...
    }

这是错误的完整信息:

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

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

我的评估是否正确,javascript 是这里的罪魁祸首?我的结论可能是这样,因为当我在实际页面上搜索该标签“ui_column wrap_column responsive_inline_hidden label_column”时,我找不到它。

我应该怎么做才能修复这个错误?

【问题讨论】:

    标签: javascript java google-chrome selenium-webdriver


    【解决方案1】:

    其他元素会收到点击错误有几个原因;但通常是因为屏幕上添加了一些东西。

    我的第一个猜测是顶部导航中的一个下拉菜单被触发,导致覆盖在您尝试点击的内容之上。

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

    如果是这种情况,您应该在单击任何链接之前执行我所说的“clickOut”方法。 “clickOut”是一种一次性方法,只需点击&lt;body&gt; 标签。当您在弹出窗口之外单击时屏幕上的弹出窗口消失时,它们很有用。但在这种情况下,它实际上会移动光标并导致任何下拉菜单消失。

    这是一个长镜头,但我在构建测试中已经多次看到它。

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2015-11-20
      • 1970-01-01
      • 2013-11-17
      • 2021-12-31
      • 2015-05-18
      • 2016-10-02
      • 1970-01-01
      相关资源
      最近更新 更多