我正在尝试编写一个自动化测试,以自动执行更新Google Chrome扩展程序的过程。我不知道另一种自动执行此操作的方法,所以这就是我目前要做的事情:
打开chrome扩展页面(据我所知,这只是一个html页面,除非我遗漏了什么)。
点击“更新扩展程序”按钮
以下是我尝试打开Chrome扩展程序页面的内容:
IwebElement UpdateButton = driver.findelement(By.Id("update-extensions-now"));
UpdateButton.Click();
由于某种原因,按钮单击未注册。我尝试了一些其他定位器,如CSS路径和Xpath,但它们也不起作用。此外,当我调试此测试时,它通过正常,所以我知道这不是我的任何定位器的问题。我(作为测试)尝试自动点击此页面上的其他元素,这是同样的问题。我无法处理chrome://扩展页面上的任何元素。
有没有人遇到过这个或者有什么想法发生了什么?
答案 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();