使用selenium webdriver自动点击chrome:// extensions页面上的按钮

时间:2015-05-05 15:20:33

标签: selenium selenium-webdriver webdriver selenium-chromedriver

我正在尝试编写一个自动化测试,以自动执行更新Google Chrome扩展程序的过程。我不知道另一种自动执行此操作的方法,所以这就是我目前要做的事情:

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

  2. 点击“更新扩展程序”按钮

  3. 以下是我尝试打开Chrome扩展程序页面的内容:

    IwebElement UpdateButton = driver.findelement(By.Id("update-extensions-now"));
    UpdateButton.Click();
    

    由于某种原因,按钮单击未注册。我尝试了一些其他定位器,如CSS路径和Xpath,但它们也不起作用。此外,当我调试此测试时,它通过正常,所以我知道这不是我的任何定位器的问题。我(作为测试)尝试自动点击此页面上的其他元素,这是同样的问题。我无法处理chrome://扩展页面上的任何元素。

    有没有人遇到过这个或者有什么想法发生了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用Chrome扩展程序API自动更新所需的扩展程序。 找到文件" manifest.json"在默认的Google Chrome中

C:\Users\*UserName*\AppData\Local\Google\Chrome\User Data\Default\Extensions

找到您的扩展程序的更新网址:

{
  "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>

<强>的appid 基于公钥哈希生成的扩展或应用程序ID,如打包中所述。您可以转到“扩展程序”页面(chrome:// extensions)找到扩展程序或Chrome应用程序的ID。

<强>代码库 .crx文件的URL。

版本 客户端用于确定是否应下载codebase指定的.crx文件。它应该匹配&#34;版本&#34;的值。在.crx文件的manifest.json文件中。

更新清单XML文件可能包含多个扩展的信息,包括多个元素。

另一种选择是使用 - extensions-update-frequency 命令行标志来设置更频繁的间隔(以秒为单位)。例如,要使检查每45秒运行一次,请运行Google Chrome,如下所示:

chrome.exe --extensions-update-frequency=45

请注意,这会影响对所有已安装的扩展程序和应用程序的检查,因此请考虑此带宽和服务器负载的影响。您可能希望暂时卸载除正在测试的所有内容之外的所有内容,并且在正常浏览器使用期间不应启用此选项。

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

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

您可以在exntesions开发者网站上找到更详细的信息:https://developer.chrome.com/extensions

答案 1 :(得分:1)

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

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

String ChromeExtensionsPage = "chrome://extensions";
driver.Navigate().GoToUrl(ChromeExtensionsPage);
driver.Switchto().Frame("DesiredFrame");
IwebElement UpdateButton = driver.findelement(By.Id("DesiredButtonID"));
UpdateButton.Click();