代码之家  ›  专栏  ›  技术社区  ›  Lukas Bach

WebDriver协议相对于注入的JavaScript自动化有什么好处?

  •  0
  • Lukas Bach  · 技术社区  · 7 年前

    W3C定义了 WebDriver Protocol ,可用于在浏览器内自动执行用户在网页上的输入。它可以与外部浏览器驱动程序(如Google Chrome的Chromedriver或FireFox Gecko驱动程序)一起使用,并且可以模拟按钮按下和悬停事件(以及更多)等操作。

    然而,我可以通过注入一些定制的JavaScript代码来获得相同的结果,这些代码直接生成事件并在网页上下文中运行它们。例如,我可以创建一个 MouseEvent

    我可能仍然需要外部软件来打开浏览器实例并注入自动化代码,但我认为没有必要为事件自动化提供完整的浏览器外部接口。

    2 回复  |  直到 7 年前
        1
  •  2
  •   StrikerVillain    7 年前
    • Jason Huggins开始构建Selenium的核心模式(最初的模式)作为 JavaScriptTestRunner
    • Same origin policy 是这种自动化模式的主要障碍之一,该模式规定,要在网页上执行javascript文件,javascript文件应来自加载网页的同一域。例如:要从www.google.com页面上的js文件运行javascript函数,必须从www.google.com web服务器本身下载javascript文件。浏览器阻止用户从外部注入javascript文件并执行它。
    • 在测试的web应用程序中。

    进入服务器是不现实的。此外,在生产服务器中,这是一个大问题。

    • RC和WebDriver项目随后开始解决这些问题。

    WebDriver体系结构设计精美,有两个对象(主要)用于实现自动化—WebDriver用于控制浏览器并查找WebElement,WebElement用于在应用程序UI上执行操作。

    // Open chrome
    WebDriver driver = new ChromeDriver();
    // open url
    driver.get("url");
    // find element
    WebElement someElement = driver.findElement(By.id("some-id"));
    // perform operation on element
    someElement.click();
    
        2
  •  1
  •   Greg    7 年前
    • 没有与页面上运行的其他javascript冲突的风险
    • 适用于非html页面、没有dom且不会运行javascript的资源
    • 可以访问注入的js没有运行权限的功能(如浏览器日志)
    • 流控制不会因意外的页面导航、重新加载等而中断
    • 当您的代码不在其中一个框架内运行时,在选项卡、窗口和框架之间切换更容易处理