自动点击按钮chrome://extensions 使用SeleniumWebDriver的页面

自动点击按钮chrome://extensions 使用SeleniumWebDriver的页面,selenium,selenium-webdriver,webdriver,selenium-chromedriver,Selenium,Selenium Webdriver,Webdriver,Selenium Chromedriver,我正在尝试编写一个自动化测试,它将自动更新GoogleChrome扩展的过程。我不知道自动执行此操作的另一种方法,因此我目前正在尝试执行以下操作: 打开chrome扩展页面(据我所知,这只是一个html页面,除非我遗漏了什么) 单击“更新扩展”按钮 以下是我打开chrome扩展页面后尝试的内容: IwebElement UpdateButton = driver.findelement(By.Id("update-extensions-now")); UpdateButton.Click();

我正在尝试编写一个自动化测试,它将自动更新GoogleChrome扩展的过程。我不知道自动执行此操作的另一种方法,因此我目前正在尝试执行以下操作:

  • 打开chrome扩展页面(据我所知,这只是一个html页面,除非我遗漏了什么)

  • 单击“更新扩展”按钮

  • 以下是我打开chrome扩展页面后尝试的内容:

    IwebElement UpdateButton = driver.findelement(By.Id("update-extensions-now"));
    UpdateButton.Click();
    
    由于某些原因,按钮单击未注册。我尝试过其他一些定位器,比如csspath和Xpath,但它们都不起作用。另外,当我调试这个测试时,它通过得很好,所以我知道我的任何定位器都没有问题。我(作为一个测试)尝试自动点击这个页面上的其他元素,这是同样的问题。我弄不懂飞机上的任何东西chrome://extensions 一页也没有


    有没有人遇到过这种情况,或者对发生的事情有什么想法

    您可以使用Chrome extensions API自动更新所需的扩展。 在默认的谷歌浏览器中找到文件“manifest.json”

    C:\Users\*UserName*\AppData\Local\Google\Chrome\User Data\Default\Extensions
    
    在此处可以找到您的扩展的更新URL:

    {
      "name": "My extension",
      ...
      "update_url": "http://myhost.com/mytestextension/updates.xml",
      ...
    }
    
    Google服务器返回的XML如下所示:

    <?xml version='1.0' encoding='UTF-8'?>
    <gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
      <app appid='yourAppID'>
        <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
      </app>
    </gupdate>
    
    请注意,这会影响对所有已安装的扩展和应用程序的检查,因此考虑带宽和服务器负载的影响。您可能希望临时卸载除正在测试的设备外的所有设备,并且在正常使用浏览器时不应在启用此选项的情况下运行

    更新每个扩展的请求将是:

    http://test.com/extension_updates.php?x=id%3DyourAppID%26v%3D1.1
    

    您可以在exntesions开发者网站上找到更详细的信息:

    如果您查看chrome://extensions您会注意到“立即更新扩展”按钮包含在iframe中。在尝试注册按钮单击之前,需要切换到iframe。i、 e:

    (这是在c#中。请注意,此代码是从内存中编写的,因此可能不是100%准确。此外,您还需要编写更健壮的方法。此代码只是快速演示了通过切换到iframe,它可以正常工作)


    您是否也确保您的代码选中了“开发人员模式”复选框??否则,按钮将被有效隐藏。将导航到页面的完整代码,加上UpdateButton部分,这将验证我的理论(或不是:-)我没有任何打开复选框的代码,因为我也无法获得开发人员模式复选框的句柄。如果我手动选中它并重新启动测试,那么复选框状态实际上仍然存在(我假设它已写入配置文件的某个地方)。无论开发者模式复选框是否打开,我仍然无法控制其他按钮,因此我知道这与更新按钮是否显示无关,正如我在前面的评论中提到的,你真的需要发布你所有的代码,以便真正A/B测试解决方案我唯一的其他代码是加载“chrome://extensions“页面,然后等待页面加载。然后我试着找到更新按钮并点击它。我发现了问题。扩展页面中包含多个iframe,因此在加载扩展页面后,我必须切换到iframe,然后才能找到并单击按钮。谢谢你的帮助当然,这是显而易见的。有趣的是,前几天我在另一篇帖子上发表了评论,提到了
    \u driver.SwitchTo().Frame(targetFrame)
    \u driver.SwitchTo().Window(targetWindow)
    。我在这里从来没有想过;)谢谢你,安东。我得调查一下。这看起来可能是一个比我正在尝试的简单得多的解决方案
    http://test.com/extension_updates.php?x=id%3DyourAppID%26v%3D1.1
    
    String ChromeExtensionsPage = "chrome://extensions";
    driver.Navigate().GoToUrl(ChromeExtensionsPage);
    driver.Switchto().Frame("DesiredFrame");
    IwebElement UpdateButton = driver.findelement(By.Id("DesiredButtonID"));
    UpdateButton.Click();