【问题标题】:Element is not currently visible and so may not be interacted with node and selenium driver元素当前不可见,因此可能无法与节点和硒驱动程序交互
【发布时间】:2016-11-03 10:24:32
【问题描述】:

我有以下代码,但无法将 driver 转换为 click div。它一直抛出错误

“元素当前不可见,因此可能无法交互”

调试时可以清楚地看到元素是可见的。如何忽略警告或错误?

var webdriver = require('selenium-webdriver')
    , By = webdriver.By
    , until = webdriver.until;
var driver = new webdriver.Builder().forBrowser('firefox').build();
driver.get('http://www.vapeworld.com/');
driver.manage().timeouts().implicitlyWait(10, 10000);
var hrefs = driver.findElements(webdriver.By.tagName("a"));
hrefs.then(function (elements) {
    elements.forEach(function (element) {
        element.getAttribute('name').then(function (obj) {
            if (obj == '1_name') {
                console.log(obj);
                element.click();
            }
        });
    });
});

【问题讨论】:

  • 如果您可以分享您的 html,我可以更好地帮助您。但是我认为它可能是一个框架,您应该在单击它之前切换到该框架。检查这个:toolsqa.com/selenium-webdriver/… 如果它对你有帮助,让我知道将其发布为答案。
  • 网站页面html在我在问题中发布的代码中。
  • 在你的问题中你说你想“点击 div”。您想点击页面上的 278 个 div 中的哪个?请阅读有关如何提出好问题的帮助主题,然后编辑您的问题以更详细地了解您的问题。

标签: node.js selenium selenium-webdriver automation click


【解决方案1】:

您的代码正在单击名称为“1_name”的A 标记。我现在正在查看该页面,但该元素不存在、隐藏或其他。

用 CSS 选择器替换大部分代码会更好,"a[name='1_name']""a[name='" + tagName + "']",只需一次查找即可找到所需的元素。然后,您可以单击该元素。

您遇到的问题是您尝试单击的元素不可见,因此出现错误消息。 Selenium 被设计为仅与用户可以看到的元素交互,这些元素是可见元素。您将需要找到您正在寻找的元素并弄清楚如何使其可见。它可能是单击页面上的另一个链接或滚动面板等。

如果您不关心用户场景而只想点击元素,无论是否可见,请查看.executeScript()

【讨论】:

    【解决方案2】:

    查看了网站,使用F12工具(Chrome)调查页面:

    var elements = [].slice.call(document.getElementsByTagName("a"));
    var elementNames = elements.map(function (x) { return x.getAttribute("name"); });
    var filledElementNames = elementNames.filter(function (x) { return x != null; });
    console.log(filledElementNames);
    

    网站http://www.vapeworld.com的内容非常动态。根据情况,您会得到一个或多个带有“x_name”的锚点,而不总是“1_name”:Chrome 中脚本的输出是 ["2_name"],Edge 返回 ["1_name", "9_name", "10_name", “17_name”、“2_name”]。所以“你可以清楚地看到元素是可见的”并非在所有情况下都是正确的。还有一些关于这个主题的驱动程序错误,因此如果需要更新驱动程序是值得的。另请参阅this SO 问题中的答案,解释驱动程序使用的所有标准。如果你想忽略这个错误,你可以捕获这个异常:

    try {
      element.click();
    } catch (Exception ex) {
      console.log("Error!");   
    }
    

    有关详细说明,请参阅 this 文档页面。

    【讨论】:

    • 问题是找不到元素。列出的示例找到了元素,但无法调用 click element.click(); “元素当前不可见,因此可能无法交互”
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2014-11-13
    • 2016-11-13
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多