コード例 #1
0
        private static string LoadExtension()
        {
            try
            {
                string extensionDir = string.Empty;
                string directory    = string.Empty;
                if (!string.IsNullOrEmpty(directory))
                {
                    extensionDir = directory;
                }
                else
                {
                    extensionDir = Path.Combine(Path.GetTempPath(), "webdriver");
                    if (Directory.Exists(extensionDir))
                    {
                        Directory.Delete(extensionDir, true);
                    }

                    Directory.CreateDirectory(extensionDir);
                    Stream zipFileStream = ResourceUtilities.GetResourceStream(ExtensionFileName, GetExtensionResourceId());
                    using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream))
                    {
                        extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
                        extensionZipFile.ExtractAll(extensionDir);
                    }
                }

                return(CheckExtensionForManifest(extensionDir));
            }
            catch (IOException e)
            {
                throw new WebDriverException(string.Empty, e);
            }
        }
コード例 #2
0
        public void Install(string profileDirectory)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(profileDirectory);
            string        text          = Path.Combine(Path.GetTempPath(), directoryInfo.Name + ".staging");
            string        text2         = Path.Combine(text, Path.GetFileName(this.extensionFileName));

            if (Directory.Exists(text2))
            {
                Directory.Delete(text2, true);
            }
            Directory.CreateDirectory(text2);
            Stream resourceStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId);

            using (ZipStorer zipStorer = ZipStorer.Open(resourceStream, FileAccess.Read))
            {
                List <ZipStorer.ZipFileEntry> list = zipStorer.ReadCentralDirectory();
                foreach (ZipStorer.ZipFileEntry current in list)
                {
                    string path = current.FilenameInZip.Replace('/', Path.DirectorySeparatorChar);
                    string destinationFileName = Path.Combine(text2, path);
                    zipStorer.ExtractFile(current, destinationFileName);
                }
            }
            string path2 = FirefoxExtension.ReadIdFromInstallRdf(text2);
            string text3 = Path.Combine(Path.Combine(profileDirectory, "extensions"), path2);

            if (Directory.Exists(text3))
            {
                Directory.Delete(text3, true);
            }
            Directory.CreateDirectory(text3);
            FileUtilities.CopyDirectory(text2, text3);
            FileUtilities.DeleteDirectory(text);
        }
コード例 #3
0
        /// <summary>
        /// Installs the extension into a profile directory.
        /// </summary>
        /// <param name="profileDir">The Firefox profile directory into which to install the extension.</param>
        public void Install(string profileDir)
        {
            string tempFileName = Path.Combine(Path.GetTempPath(), this.extensionFileName);

            if (Directory.Exists(tempFileName))
            {
                Directory.Delete(tempFileName, true);
            }

            // First, expand the .xpi archive into a temporary location.
            Directory.CreateDirectory(tempFileName);
            Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId);

            using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream))
            {
                extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
                extensionZipFile.ExtractAll(tempFileName);
            }

            // Then, copy the contents of the temporarly location into the
            // proper location in the Firefox profile directory.
            string id = ReadIdFromInstallRdf(tempFileName);
            string extensionDirectory = Path.Combine(Path.Combine(profileDir, "extensions"), id);

            if (Directory.Exists(extensionDirectory))
            {
                Directory.Delete(extensionDirectory, true);
            }

            Directory.CreateDirectory(extensionDirectory);
            FileUtilities.CopyDirectory(tempFileName, extensionDirectory);
            Directory.Delete(tempFileName, true);
        }
コード例 #4
0
        /// <summary>
        /// Installs the WebDriver Safari extension.
        /// </summary>
        public void Install()
        {
            if (this.skipExtensionInstallation)
            {
                return;
            }

            this.BackupSafariSettings();
            string installLocation = Path.Combine(GetSafariExtensionsDirectory(), ExtensionInstalledFileName);

            if (!string.IsNullOrEmpty(this.extensionSourcePath) && File.Exists(this.extensionSourcePath))
            {
                // Use File.Copy when possible, as it's *much* faster than using Streams.
                File.Copy(this.extensionSourcePath, installLocation, true);
            }
            else
            {
                using (Stream extensionStream = ResourceUtilities.GetResourceStream(ExtensionFileName, ExtensionResourceId))
                {
                    using (FileStream outputStream = new FileStream(installLocation, FileMode.Create, FileAccess.Write))
                    {
                        byte[] buffer    = new byte[4096];
                        int    bytesRead = extensionStream.Read(buffer, 0, buffer.Length);
                        while (bytesRead > 0)
                        {
                            outputStream.Write(buffer, 0, bytesRead);
                            bytesRead = extensionStream.Read(buffer, 0, buffer.Length);
                        }
                    }
                }
            }

            WritePropertyListFile();
        }
コード例 #5
0
ファイル: FirefoxProfile.cs プロジェクト: anthrax3/selenium-2
        private void InstallExtension()
        {
            string tempFileName = Path.Combine(Path.GetTempPath(), "webdriver");

            if (Directory.Exists(tempFileName))
            {
                Directory.Delete(tempFileName, true);
            }

            Directory.CreateDirectory(tempFileName);
            Stream zipFileStream = ResourceUtilities.GetResourceStream(ExtensionFileName, ExtensionResourceId);

            using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream))
            {
                extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
                extensionZipFile.ExtractAll(tempFileName);
            }

            string id = ReadIdFromInstallRdf(tempFileName);
            string extensionDirectory = Path.Combine(extensionsDir, id);

            if (Directory.Exists(extensionDirectory))
            {
                Directory.Delete(extensionDirectory, true);
            }

            Directory.CreateDirectory(extensionDirectory);
            CopyDirectory(tempFileName, extensionDirectory);
            Directory.Delete(tempFileName, true);
        }
コード例 #6
0
        private static string ReadScript(string script)
        {
            string extractedScript = string.Empty;
            Stream resourceStream  = ResourceUtilities.GetResourceStream(script, script);

            using (TextReader reader = new StreamReader(resourceStream))
            {
                extractedScript = reader.ReadToEnd();
            }

            return(extractedScript);
        }
コード例 #7
0
        /// <summary>
        /// Prevents a default instance of the <see cref="RelativeBy"/> class.
        /// </summary>
        protected RelativeBy() : base()
        {
            string atom = string.Empty;

            using (Stream atomStream = ResourceUtilities.GetResourceStream("find-elements.js", "find-elements.js"))
            {
                using (StreamReader atomReader = new StreamReader(atomStream))
                {
                    atom = atomReader.ReadToEnd();
                }
            }

            wrappedAtom = string.Format(CultureInfo.InvariantCulture, "return ({0}).apply(null, arguments);", atom);
        }
コード例 #8
0
        private string GetMutationListenerScript()
        {
            string listenerScript = string.Empty;

            using (Stream resourceStream = ResourceUtilities.GetResourceStream("mutation-listener.js", "mutation-listener.js"))
            {
                using (StreamReader resourceReader = new StreamReader(resourceStream))
                {
                    listenerScript = resourceReader.ReadToEnd();
                }
            }

            return(listenerScript);
        }
コード例 #9
0
 private void ReadDefaultPreferences()
 {
     using (Stream defaultPrefsStream = ResourceUtilities.GetResourceStream("webdriver.json", "WebDriver.FirefoxPreferences"))
     {
         using (StreamReader reader = new StreamReader(defaultPrefsStream))
         {
             string defaultPreferences = reader.ReadToEnd();
             Dictionary <string, object> deserializedPreferences     = JsonConvert.DeserializeObject <Dictionary <string, object> >(defaultPreferences, new ResponseValueJsonConverter());
             Dictionary <string, object> immutableDefaultPreferences = deserializedPreferences["frozen"] as Dictionary <string, object>;
             Dictionary <string, object> editableDefaultPreferences  = deserializedPreferences["mutable"] as Dictionary <string, object>;
             this.profilePreferences = new Preferences(immutableDefaultPreferences, editableDefaultPreferences);
         }
     }
 }
コード例 #10
0
        private void ExtractNativeLibrary()
        {
            string nativeLibraryFolderName = string.Format(CultureInfo.InvariantCulture, "webdriver{0}libs", tempFileGenerator.Next());
            string nativeLibraryDirectory  = Path.Combine(Path.GetTempPath(), nativeLibraryFolderName);

            if (!Directory.Exists(nativeLibraryDirectory))
            {
                Directory.CreateDirectory(nativeLibraryDirectory);
            }

            this.nativeLibraryPath = Path.Combine(nativeLibraryDirectory, LibraryName);
            string resourceName  = GetNativeLibraryResourceName();
            Stream libraryStream = ResourceUtilities.GetResourceStream(LibraryName, resourceName);

            this.WriteNativeLibraryFile(libraryStream);
        }
コード例 #11
0
        private static string GetAtom(string atomResourceName)
        {
            string atom = string.Empty;

            using (Stream atomStream = ResourceUtilities.GetResourceStream(atomResourceName, atomResourceName))
            {
                using (StreamReader atomReader = new StreamReader(atomStream))
                {
                    atom = atomReader.ReadToEnd();
                }
            }

            string wrappedAtom = string.Format(CultureInfo.InvariantCulture, "return ({0}).apply(null, arguments);", atom);

            return(wrappedAtom);
        }
コード例 #12
0
        private static string ExtractAndCheck(FirefoxProfile profile, string noFocusSoName, string libraryPath32Bit, string libraryPath64Bit)
        {
            //// 1. Extract x86/x_ignore_nofocus.so to profile.getLibsDir32bit
            //// 2. Extract amd64/x_ignore_nofocus.so to profile.getLibsDir64bit
            //// 3. Create a new LD_LIB_PATH string to contain:
            ////    profile.getLibsDir32bit + ":" + profile.getLibsDir64bit
            List <string> pathsSet = new List <string>();

            pathsSet.Add(libraryPath32Bit);
            pathsSet.Add(libraryPath64Bit);

            StringBuilder builtPath = new StringBuilder();

            foreach (string path in pathsSet)
            {
                string outSoPath    = Path.Combine(profile.ProfileDirectory, path);
                string file         = Path.Combine(outSoPath, noFocusSoName);
                string resourceName = string.Format(CultureInfo.InvariantCulture, "WebDriver.FirefoxNoFocus.{0}.dll", path);
                if (ResourceUtilities.IsValidResourceName(resourceName))
                {
                    using (Stream libraryStream = ResourceUtilities.GetResourceStream(noFocusSoName, resourceName))
                    {
                        Directory.CreateDirectory(outSoPath);
                        using (FileStream outputStream = File.Create(file))
                        {
                            byte[] buffer    = new byte[1000];
                            int    bytesRead = libraryStream.Read(buffer, 0, buffer.Length);
                            while (bytesRead > 0)
                            {
                                outputStream.Write(buffer, 0, bytesRead);
                                bytesRead = libraryStream.Read(buffer, 0, buffer.Length);
                            }
                        }
                    }
                }

                if (!File.Exists(file))
                {
                    throw new WebDriverException("Could not locate " + path + ": "
                                                 + "native events will not work.");
                }

                builtPath.Append(outSoPath).Append(Path.PathSeparator);
            }

            return(builtPath.ToString());
        }
コード例 #13
0
 private void ReadDefaultPreferences()
 {
     using (Stream resourceStream = ResourceUtilities.GetResourceStream("webdriver.json", "WebDriver.FirefoxPreferences"))
     {
         using (StreamReader streamReader = new StreamReader(resourceStream))
         {
             string value = streamReader.ReadToEnd();
             Dictionary <string, object> dictionary = JsonConvert.DeserializeObject <Dictionary <string, object> >(value, new JsonConverter[]
             {
                 new ResponseValueJsonConverter()
             });
             Dictionary <string, object> defaultImmutablePreferences = dictionary["frozen"] as Dictionary <string, object>;
             Dictionary <string, object> defaultPreferences          = dictionary["mutable"] as Dictionary <string, object>;
             this.profilePreferences = new Preferences(defaultImmutablePreferences, defaultPreferences);
         }
     }
 }
コード例 #14
0
ファイル: PianoTests.cs プロジェクト: YuJiang01/Nirvana
        private static PianoAnnotationSource GetAnnotationSource(string resourcePath)
        {
            if (resourcePath == null)
            {
                return(null);
            }

            var ndbPath = $"UnitTests.Resources.{resourcePath}.ndb";
            var refPath = $"UnitTests.Resources.{resourcePath}.bases";

            var ndbStream = ResourceUtilities.GetResourceStream(ndbPath);
            var refStream = ResourceUtilities.GetResourceStream(refPath);

            var compressedSequence       = new CompressedSequence();
            var compressedSequenceReader = new CompressedSequenceReader(refStream, compressedSequence);

            return(new PianoAnnotationSource(ndbStream, compressedSequenceReader));
        }
コード例 #15
0
ファイル: FirefoxExtension.cs プロジェクト: 304883563/Appium
        /// <summary>
        /// Installs the extension into a profile directory.
        /// </summary>
        /// <param name="profileDirectory">The Firefox profile directory into which to install the extension.</param>
        public void Install(string profileDirectory)
        {
            DirectoryInfo info = new DirectoryInfo(profileDirectory);
            string        stagingDirectoryName = Path.Combine(Path.GetTempPath(), info.Name + ".staging");
            string        tempFileName         = Path.Combine(stagingDirectoryName, Path.GetFileName(this.extensionFileName));

            if (Directory.Exists(tempFileName))
            {
                Directory.Delete(tempFileName, true);
            }

            // First, expand the .xpi archive into a temporary location.
            Directory.CreateDirectory(tempFileName);
            Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId);

            using (ZipStorer extensionZipFile = ZipStorer.Open(zipFileStream, FileAccess.Read))
            {
                List <ZipStorer.ZipFileEntry> entryList = extensionZipFile.ReadCentralDirectory();
                foreach (ZipStorer.ZipFileEntry entry in entryList)
                {
                    string localFileName   = entry.FilenameInZip.Replace('/', Path.DirectorySeparatorChar);
                    string destinationFile = Path.Combine(tempFileName, localFileName);
                    extensionZipFile.ExtractFile(entry, destinationFile);
                }
            }

            // Then, copy the contents of the temporarly location into the
            // proper location in the Firefox profile directory.
            string id = ReadIdFromInstallRdf(tempFileName);
            string extensionDirectory = Path.Combine(Path.Combine(profileDirectory, "extensions"), id);

            if (Directory.Exists(extensionDirectory))
            {
                Directory.Delete(extensionDirectory, true);
            }

            Directory.CreateDirectory(extensionDirectory);
            FileUtilities.CopyDirectory(tempFileName, extensionDirectory);

            // By deleting the staging directory, we also delete the temporarily
            // expanded extension, which we copied into the profile.
            FileUtilities.DeleteDirectory(stagingDirectoryName);
        }
コード例 #16
0
        private static string ExtractAndCheck(FirefoxProfile profile, string noFocusSoName, string libraryPath32Bit, string libraryPath64Bit)
        {
            List <string> list = new List <string>();

            list.Add(libraryPath32Bit);
            list.Add(libraryPath64Bit);
            StringBuilder stringBuilder = new StringBuilder();

            foreach (string current in list)
            {
                string text       = Path.Combine(profile.ProfileDirectory, current);
                string path       = Path.Combine(text, noFocusSoName);
                string resourceId = string.Format(CultureInfo.InvariantCulture, "WebDriver.FirefoxNoFocus.{0}.dll", new object[]
                {
                    current
                });
                if (ResourceUtilities.IsValidResourceName(resourceId))
                {
                    using (Stream resourceStream = ResourceUtilities.GetResourceStream(noFocusSoName, resourceId))
                    {
                        Directory.CreateDirectory(text);
                        using (FileStream fileStream = File.Create(path))
                        {
                            byte[] array = new byte[1000];
                            for (int i = resourceStream.Read(array, 0, array.Length); i > 0; i = resourceStream.Read(array, 0, array.Length))
                            {
                                fileStream.Write(array, 0, i);
                            }
                        }
                    }
                }
                if (!File.Exists(path))
                {
                    throw new WebDriverException("Could not locate " + current + ": native events will not work.");
                }
                stringBuilder.Append(text).Append(Path.PathSeparator);
            }
            return(stringBuilder.ToString());
        }
コード例 #17
0
        /// <summary>
        /// Installs the extension into a profile directory.
        /// </summary>
        /// <param name="profileDirectory">The Firefox profile directory into which to install the extension.</param>
        public void Install(string profileDirectory)
        {
            DirectoryInfo info = new DirectoryInfo(profileDirectory);
            string        stagingDirectoryName = Path.Combine(Path.GetTempPath(), info.Name + ".staging");
            string        tempFileName         = Path.Combine(stagingDirectoryName, Path.GetFileName(this.extensionFileName));

            if (Directory.Exists(tempFileName))
            {
                Directory.Delete(tempFileName, true);
            }

            // First, expand the .xpi archive into a temporary location.
            Directory.CreateDirectory(tempFileName);
            Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId);

            using (ZipArchive extensionZipArchive = new ZipArchive(zipFileStream, ZipArchiveMode.Read))
            {
                extensionZipArchive.ExtractToDirectory(tempFileName);
            }

            // Then, copy the contents of the temporarly location into the
            // proper location in the Firefox profile directory.
            string id = GetExtensionId(tempFileName);
            string extensionDirectory = Path.Combine(Path.Combine(profileDirectory, "extensions"), id);

            if (Directory.Exists(extensionDirectory))
            {
                Directory.Delete(extensionDirectory, true);
            }

            Directory.CreateDirectory(extensionDirectory);
            FileUtilities.CopyDirectory(tempFileName, extensionDirectory);

            // By deleting the staging directory, we also delete the temporarily
            // expanded extension, which we copied into the profile.
            FileUtilities.DeleteDirectory(stagingDirectoryName);
        }