我正在使用 Selenium 2.0 为我的 Google Chrome 扩展创建自动化测试:
首先,我也想测试安装过程,但是当使用 Selenium 弹出安装对话框时,似乎无法单击“添加”按钮。(我关于这个的另一个问题)。
现在,我改变了计划。我不想在测试过程中安装扩展程序,而是想在安装扩展程序的情况下启动 Chrome。但我还没有成功。
请看下面的代码:
var webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome');
var o = new chrome.Options();
o.addExtensions(['extensions/chrome/chrome_extension.zip']); // crx file is just a zip file
var s = new chrome.ServiceBuilder('bin/chromedriver').build();
var driver = chrome.createDriver(o, s)
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,出现以下错误:

我注意到 ChromeDriver 在打开 Chrome 时会加载一个名为“Chrome Automation Extension 1”的 Chrome 扩展,因此必须有一种方法来加载另一个扩展,要么使用应用程序 ID 直接从 Webstore 加载,要么从本地计算机加载- 已包装或未包装。
任何帮助将不胜感激!
selenium google-chrome-extension selenium-chromedriver selenium-webdriver
我正在开发一个 Chrome 扩展程序,可以用不同的单词替换网站上的单词。我允许用户输入他们想要替换的自己的单词,我将它们保存如下:
function storeOptions(){
var words = new Object(); // storageArea.set() method takes an object that contains all the items to be stored. This Object contains those.
$("option").each(function(key,value){ // .each(index, element)
words[value.id] = value.text;
chrome.storage.sync.set(words, function(){console.log("Stored: "+value.text);});
});
}
Run Code Online (Sandbox Code Playgroud)
在此实现之前,我通过浏览器操作成功启用和禁用了扩展程序,该浏览器操作以类似的方式使用存储在同一存储区域中的设置:
chrome.storage.sync.set({"status":"enabled"});
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,在实现添加单词的选项后,状态要么没有正确存储,要么受到选项的影响,因为当我尝试检索它时,它没有值“已启用”或“已禁用”,如下所示:
chrome.storage.sync.get("status", function(result) {
console.log("status: "+result["status"]); // status: status
});
Run Code Online (Sandbox Code Playgroud)
我在想也许我可以将要替换的单词存储为数组,以如下方式调用:
chrome.storage.sync.set({"words" : words});
Run Code Online (Sandbox Code Playgroud)
然后我就可以通过获取“状态”或“单词”来区分两者,但这不起作用。
如何存储状态和单词而不相互干扰?
Chrome 扩展库具有调用下载方法的巧妙功能...但是,这样的回调不允许我们为右键单击图像时的行为编写脚本 - 事实上,右键单击图像时它不会激活(如果它会激活)是一个链接)。
Chrome 的扩展命令是什么,可以让我们调用下载图像?谢谢。
Chrome 扩展程序需要在其设置中指定的字符串列表。如果安装了扩展程序,我想提供默认字符串,但允许用户根据需要更改字符串列表。如何在 chrome.storage API 中提供这些初始设置?
我的第一个想法是检查列表是否为空。如果是,则用默认值填充。但是,如果用户愿意,可以删除列表中的所有字符串,这将导致列表再次填充默认元素。
我已经看到很多问题,所有问题都与背景页面到内容脚本有关。
我的扩展有一个选项页面和一个内容脚本。内容脚本处理存储功能(chrome.storage操作)。每当用户更改选项页面中的设置时,我想向内容脚本发送一条消息以存储新数据。
选项.js
var data = "abcd"; // let data
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, "storeData:" + data, function(response){
console.log(response); // gives undefined :(
});
});
Run Code Online (Sandbox Code Playgroud)
内容脚本js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
// not working
});
Run Code Online (Sandbox Code Playgroud)
我想将数据从 popup.hmtl 的本地存储传递到内容脚本 content.js 我使用 popup.html 接收用户名和密码并将其存储在本地存储中。现在我想在执行之前将数据传输到内容脚本。
**popup.html**
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" async src="popup.js"></script>
</head>
<body>
<table>
<tr>
<td>
Username:
<td><input id="u1" type="text" name="uname">
</tr>
<tr>
<td>
Password:
<td><input id="u2" type="password" name="pass">
</tr>
<tr>
<td>
<td>
<input id="clickme" type="button" value="save" />
</tr>
</table>
<div id="result"></div>
<div id="result2"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
弹出窗口.js
document.getElementById('clickme').onclick=myfunction;
var sname = localStorage.getItem("username1");
var spass=localStorage.getItem("password1");
document.getElementById("result").innerHTML = localStorage.getItem("username1");
document.getElementById("result2").innerHTML=localStorage.getItem("password1");
function myfunction(){
// Check browser support
if (typeof(Storage) != "undefined") {
var uname="bhuwan";
var username=document.getElementById("u1").value;
var password=document.getElementById("u2").value; …Run Code Online (Sandbox Code Playgroud) javascript message-passing google-chrome-extension content-script
我正在尝试创建一个具有以下规格的 Chrome 扩展:
在我当前的实现中,我没有在manifest.json 中设置默认弹出窗口。如果后台脚本发现存在访问令牌,它将使用 chrome.browserAction.setPopup 设置弹出窗口。但是,只有在我单击该图标两次后才会显示弹出窗口。我知道这是因为它在第一次单击时设置弹出窗口,然后在第二次单击时显示它。但是,有什么办法让它显示在第一个吗?
有没有更好的方法来实现这个逻辑,这样我就不必在每次检测到访问令牌时都设置弹出窗口并要求用户单击两次(在我看来,这对用户来说不是很友好)?
谢谢!
我正在制作一个 Chrome 扩展程序。单击 中的按钮popup.html将打开一个新窗口并加载feedback-panel.html.
这是可行的,但是,单击时,我想检查窗口是否已经打开,如果是,则将焦点放在它而不是创建一个新窗口。
JavaScript window.open 仅当窗口尚不存在时看起来很有希望,但它依赖于在打开窗口时将打开的窗口存储为父页面上的变量,并在打开新窗口之前检查这些窗口。这对我不起作用,因为父窗口 ( popup.html) 经常会自行关闭并重新打开,并且我会丢失变量。
我尝试实现相同的想法,但将窗口变量存储在 with 中chrome.storage,因为它允许您存储对象。好吧,它确实可以让您存储对象,但它首先序列化它们,因此窗口变量丢失了它的所有功能,我最终得到
result.feedbackPanel.focus() 不是函数
这是我的尝试:
function openFeedbackPanel(){
chrome.storage.local.get('feedbackPanel', function (result) {
console.log( result.feedbackPanel); // logs window object sans all functions
if(result.feedbackPanel && ! result.feedbackPanel.closed){
try{
result.feedbackPanel.focus();
}
catch(error){
chrome.storage.local.remove('feedbackPanel', function () {
});
createFeedbackPanel();
}
}
else{
createFeedbackPanel();
}
});
}
function createFeedbackPanel(){
var win = window.open('feedback-panel.html', 'Feedback', 'width=935, height=675');
console.log(win); // logs full object as expected
chrome.storage.local.set({"feedbackPanel": win});
} …Run Code Online (Sandbox Code Playgroud) javascript jquery google-chrome window google-chrome-extension
也许我理解有问题?
这怎么可能允许从扩展程序访问所有 cookie?
这是否意味着任何扩展程序都可能像这样简单地窃取所有 cookie?
我假设 chrome.google.com 支持人员正在检查每个扩展程序和每个更新,以确保不存在此类危险的事情,但我有开发扩展程序的经验,并且看起来扩展程序更新是自动调节的。那么,所有这一切是否意味着任何扩展程序都可能窃取所有 cookie 数据并将其发送到任何地方?
我正在尝试开发一个 chrome 扩展来为 gmail 添加一些功能。我一直在使用 any.do 并想了解我们如何做类似的事情?
我们是否在 DOM 中注入新的 div 元素,或者是否有任何 gmail api,我可以通过它添加新按钮并定义操作侦听器?