【问题标题】:Automate a button click on chrome://extensions page using selenium webdriver使用 selenium webdriver 自动单击 chrome://extensions 页面上的按钮
【发布时间】:2015-07-15 10:15:53
【问题描述】:

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

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

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

这是我在打开 chrome 扩展页面后所尝试的:

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

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

有没有人遇到过这种情况或对发生了什么有任何想法?

【问题讨论】:

  • 您是否还确保您的代码选中开发者模式复选框?否则,按钮将被有效隐藏。把你导航到页面的完整代码加上 UpdateButton 部分,这将验证我的理论(或不是:-))
  • 我没有打开复选框的任何代码,因为我也无法处理开发人员模式复选框。如果我手动检查它并重新启动测试,那么复选框状态实际上仍然存在(我假设它已写入某处的配置文件)。无论开发者模式复选框是否打开,我仍然无法处理存在的其他按钮,所以我知道这与更新按钮是否显示无关
  • banjaxx,正如我在之前的评论中提到的,您确实需要发布您拥有的所有代码才能真正进行 A/B 测试解决方案
  • 我唯一的其他代码是加载“chrome://extensions”页面,然后等待页面加载。然后我试图找到更新按钮并单击它。我发现了这个问题。扩展页面中包含多个 iframe,因此在加载扩展页面后,我必须切换到 iframe,然后才能找到并单击按钮。感谢您的帮助
  • 当然,现在很明显了。有趣的是,前几天我评论了另一篇帖子,提到了_driver.SwitchTo().Frame(targetFrame)_driver.SwitchTo().Window(targetWindow)。从来没有想过这里;)

标签: selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案1】:

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

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>

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

代码库 .crx 文件的 URL。

版本 客户端用于确定是否应下载代码库指定的 .crx 文件。它应该与 .crx 文件的 manifest.json 文件中的“version”值匹配。

更新清单 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

【讨论】:

  • 谢谢安东。我将不得不对此进行调查。这看起来可能比我正在尝试的解决方案简单得多
【解决方案2】:

如果您查看“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();

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多