none
Подскажите как Selenium WebDriver с использованием C# создать базу днных RRS feed

  • Вопрос

  • Здравствуйте....хочу создать тест принцип теста такой:

        Зайти на свою страницу в контакте авторизоваться и выбрать id друга и отослать ему сообщения

     вот код реализации на с#:

    public static void SendMessage_VK_Single(String sourceID, String sourcePSW, String destinationID, String Message)
            {
               
                OpenQA.Selenium.IE.InternetExplorerDriver driver = new OpenQA.Selenium.IE.InternetExplorerDriver();
                System.Threading.Thread.Sleep(10000);
                driver.Navigate().GoToUrl("http://vk.com");

                try
                {
                    if (driver.FindElementByName("email") != null)
                    {
                        driver.FindElementByName("email").SendKeys(sourceID);
                        driver.FindElementByName("pass").SendKeys(sourcePSW);
                        System.Threading.Thread.Sleep(2000);
                    }
                }
                catch (OpenQA.Selenium.WebDriverException ex)
                {
                    //MessageBox.Show(ex.Message);
                }
               
                driver.Navigate().GoToUrl("http://vk.com/id"+destinationID);
                System.Threading.Thread.Sleep(1500);
                driver.Navigate().GoToUrl("http://vk.com/write"+destinationID);
                ////зайшли на сторінку повідомлення           
                driver.FindElementById("imw_text").SendKeys(Message);
                driver.FindElementById("imw_send").Click();
               
            }

    Подскажите  как создать базу данных и доступ к ней из такими данными  sourceID - мои логин, sourcePSW  - мои пароль, destinationID - id друга, Message собщения которое посылается другу????

     WebDriver (DLL'ки під C#.NET) поключены

    26 января 2013 г. 18:22

Ответы

  • А элемент с таким id точно существует в DOM дереве? Судя по ошибке его как раз нет


    Для связи [mail]

    Я, уже решил это скачал более позднею версию selenium-dotnet-2.2.0, ну теперь у меня новая проблема не срабатывает кнопка отправки сообщения:

    System.Threading.Thread.Sleep(15000);
                driver.FindElementById("imw_send").Click();/// VS2012 не какой ошибки не показывает...проверял точками останова переход есть на driver.FindElementById("imw_send").Click();, а действий не каких не выполняется, а именно отсылка сообщения, что это может быть??? 

    Здравствуйте, проблема была в бразерах в Google Chrome...все работает.

       Вот как я реализовал может кому пригодится:

    1. Нужно скачать для Google Chrome, драйвер на сайте selenium. Поместить драйвер в свой проект в папку Debug.

    2. В коде прописать строку: OpenQA.Selenium.Chrome.ChromeDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver();

    1. я создал файл с данными формата xml, вот его структура:

    <?xml version="1.0" encoding="UTF-8"?>
    <sait>  
       <source Source_Login="текст логин" source_PSW="текст пароля" destinationID="id-друга" Destination_TextMessage="Текст сообщения"/>
    </sait>

    2. Подключения к файлу xml, та выборка данных: 

    private void Form1_Load(object sender, EventArgs e)
            {
                XDocument xDocument = XDocument.Load("D:\\Projects C#\\TestVK\\TestVK\\bin\\Debug\\VK.xml");
                var id = xDocument.Element("sait").Element("source").Attribute("Source_Login").Value;
                tbSource_Login.Text = id;
                var ps = xDocument.Element("sait").Element("source").Attribute("source_PSW").Value;
                tbSource_PSW.Text = ps;
                var friend = xDocument.Element("sait").Element("source").Attribute("destinationID").Value;
                tbDestination_VK_ID.Text = friend;
                var report = xDocument.Element("sait").Element("source").Attribute("Destination_TextMessage").Value;
                tbDestination_TextMessage.Text = report;


    4 февраля 2013 г. 18:36

Все ответы

  • Привет

    Не знаком с данным веб-драйвером, но какую базу вы хотите подключить, локальный файл базы данных? Может хватит для ваших целей простого файла конфигурации приложения с данными о пользователе?


    Для связи [mail]

    28 января 2013 г. 9:07
  • Привет

    Не знаком с данным веб-драйвером, но какую базу вы хотите подключить, локальный файл базы данных? Может хватит для ваших целей простого файла конфигурации приложения с данными о пользователе?


    Для связи [mail]

    Здравствуйте, я уже все реализовал... с помощью ввода данных...авторизация проходит хорошо....переход на страницу друга тоже все ок!, ну а вот оправка сообщения возникает проблема вот такого типа:

    28 января 2013 г. 19:06
  • А элемент с таким id точно существует в DOM дереве? Судя по ошибке его как раз нет


    Для связи [mail]

    31 января 2013 г. 9:04
  • А элемент с таким id точно существует в DOM дереве? Судя по ошибке его как раз нет


    Для связи [mail]

    Я, уже решил это скачал более позднею версию selenium-dotnet-2.2.0, ну теперь у меня новая проблема не срабатывает кнопка отправки сообщения:

    System.Threading.Thread.Sleep(15000);
                driver.FindElementById("imw_send").Click();/// VS2012 не какой ошибки не показывает...проверял точками останова переход есть на driver.FindElementById("imw_send").Click();, а действий не каких не выполняется, а именно отсылка сообщения, что это может быть??? 

    1 февраля 2013 г. 9:34
  • А элемент с таким id точно существует в DOM дереве? Судя по ошибке его как раз нет


    Для связи [mail]

    Я, уже решил это скачал более позднею версию selenium-dotnet-2.2.0, ну теперь у меня новая проблема не срабатывает кнопка отправки сообщения:

    System.Threading.Thread.Sleep(15000);
                driver.FindElementById("imw_send").Click();/// VS2012 не какой ошибки не показывает...проверял точками останова переход есть на driver.FindElementById("imw_send").Click();, а действий не каких не выполняется, а именно отсылка сообщения, что это может быть??? 

    Здравствуйте, проблема была в бразерах в Google Chrome...все работает.

       Вот как я реализовал может кому пригодится:

    1. Нужно скачать для Google Chrome, драйвер на сайте selenium. Поместить драйвер в свой проект в папку Debug.

    2. В коде прописать строку: OpenQA.Selenium.Chrome.ChromeDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver();

    1. я создал файл с данными формата xml, вот его структура:

    <?xml version="1.0" encoding="UTF-8"?>
    <sait>  
       <source Source_Login="текст логин" source_PSW="текст пароля" destinationID="id-друга" Destination_TextMessage="Текст сообщения"/>
    </sait>

    2. Подключения к файлу xml, та выборка данных: 

    private void Form1_Load(object sender, EventArgs e)
            {
                XDocument xDocument = XDocument.Load("D:\\Projects C#\\TestVK\\TestVK\\bin\\Debug\\VK.xml");
                var id = xDocument.Element("sait").Element("source").Attribute("Source_Login").Value;
                tbSource_Login.Text = id;
                var ps = xDocument.Element("sait").Element("source").Attribute("source_PSW").Value;
                tbSource_PSW.Text = ps;
                var friend = xDocument.Element("sait").Element("source").Attribute("destinationID").Value;
                tbDestination_VK_ID.Text = friend;
                var report = xDocument.Element("sait").Element("source").Attribute("Destination_TextMessage").Value;
                tbDestination_TextMessage.Text = report;


    4 февраля 2013 г. 18:36
  • Спасибо, что поделились решением проблемы

    Для связи [mail]

    5 февраля 2013 г. 12:35
  • Спасибо, что поделились решением проблемы

    Для связи [mail]

    Всем, привет...хочу добавить до сработанный проект:

    1. Файл XML, создается автоматически при загрузки формы;

    2. Данные записываются в XML из textbox, при нажатии на radiobutton

    3. Выводится информация, что данные успешно загружены

    4. И кнопка отправки, запускает данный тест в  Google Chrome

     Надаю код та скриншот проекту, может кому пригодится:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Globalization;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using Selenium;


    namespace MessageVK
    {
        public partial class VK : Form
        {
            public VK()
            {
                InitializeComponent();
                        // Перевірка на наявність БД 
               // якщо немає, то створити
                if (!File.Exists("DB.xml"))
                    CreateXmlDocument("DB.xml");
            }

            // Створити БД
            private void CreateXmlDocument(string filename)
            {
                var xmlTextWriter = new XmlTextWriter(filename, Encoding.UTF32);
                xmlTextWriter.WriteStartDocument();
                xmlTextWriter.WriteStartElement("DBInfo");
                xmlTextWriter.WriteEndDocument();
                xmlTextWriter.Close();

            }

            // Запис даних в БД
            private void WriteToXmlDocument(string filename, string name, string pasPd, string number, string myText)  
            {
                try
                {
                    var xmlDocument = new XmlDocument();
                    var fileStream = new FileStream(filename, FileMode.Open);
                    xmlDocument.Load(fileStream);

                    // Створюємо новий запис source
                    var user = xmlDocument.CreateElement("source");

                    // Створюємо поля для даних про користувача  
                    var login = xmlDocument.CreateElement("source_Login");
                    var pass = xmlDocument.CreateElement("source_PSW");
                    var id = xmlDocument.CreateElement("DestinationVK_ID");
                    var content = xmlDocument.CreateElement("Destionation_Text");

                    string passCrypto = Encrypt(pasPd); // Зашифрували пароль

                    // Створюємо записи для даних про користувача   
                    var tbSource_Login = xmlDocument.CreateTextNode(name);
                    var tbSource_PSW = xmlDocument.CreateTextNode(passCrypto);
                    var tbDestinationVK_ID = xmlDocument.CreateTextNode(number);
                    var tbDestination_TextMessage = xmlDocument.CreateTextNode(myText);

                    login.AppendChild(tbSource_Login);  // Заносимо значення логіна в поле LOGIN  
                    pass.AppendChild(tbSource_PSW);    // Заносимо значення пароля в поле PASSWORD  
                    id.AppendChild(tbDestinationVK_ID);     // Заносимо значення id - користувача в поле ID  
                    content.AppendChild(tbDestination_TextMessage); // Заносим контент в поле CONTENT  

                    //Запис інформації в блок source 
                    
                    user.AppendChild(login);
                    user.AppendChild(pass);
                    user.AppendChild(id);
                    user.AppendChild(content);

                    // Заносимо запис в xml  
                    if (xmlDocument.DocumentElement != null)
                        xmlDocument.DocumentElement.AppendChild(user);

                    fileStream.Close(); // Закриваємо потік  
                    xmlDocument.Save(filename); // Зберігаємо файл 

                    MessageBox.Show(@"Дані успішно занесені в базу.", @"Повідомлення",
                    MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception)
                {
                    // MessageBox.Show(@"Щось та пішло не так ;(", @"Упс",
                    // MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            // Використовував алгоритм шифрування DES
            
            static readonly byte[] Bytes = Encoding.ASCII.GetBytes("ZeroCool");

            public static string Encrypt(string originalString)
            {
                if (String.IsNullOrEmpty(originalString))
                {
                    throw new ArgumentNullException("originalString");
                }
                
                var cryptoProvider = new DESCryptoServiceProvider();
                var memoryStream = new MemoryStream();
                var cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(Bytes, Bytes), CryptoStreamMode.Write);

                var writer = new StreamWriter(cryptoStream);
                writer.Write(originalString);
                writer.Flush();
                cryptoStream.FlushFinalBlock();
                writer.Flush();

                return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
            }

            // метод расшифровки DES

            public static string Decrypt(string decryptedString)
            {
                if (String.IsNullOrEmpty(decryptedString))
                {
                    throw new ArgumentNullException("decryptedString");
                }

                var cryptoProvider = new DESCryptoServiceProvider();
                var memoryStream = new MemoryStream(Convert.FromBase64String(decryptedString));
                var cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(Bytes, Bytes), CryptoStreamMode.Read);
                var reader = new StreamReader(cryptoStream);

                return reader.ReadToEnd();
            }

            // Завантаження БД  

            private void LoadXmlDocument(string filename, string Source_Login, string Source_PSW, string DestinationVK_ID, string Destination_TextMessage) // Вот в этом методе у меня проблемы
            {
                try
                {
                    var xmlDocument = new XmlDocument();
                    var fileStream = new FileStream(filename, FileMode.Open);
                    xmlDocument.Load(fileStream);

                    var list = xmlDocument.GetElementsByTagName("source"); // Создаем и заполняем лист по тегу "source" 
                    int i = 0; //Створення лічильника
                    foreach (XmlNode node in list)
                    {
                        var login = (XmlElement)xmlDocument.GetElementsByTagName("source_Login")[i]; // Помістити id в змінну  
                        var pass = (XmlElement)xmlDocument.GetElementsByTagName("source_PSW")[i];   // помістити password в змінну  
                        var userid = (XmlElement)xmlDocument.GetElementsByTagName("DestinationVK_ID")[i]; // помістити userid в змінну
                        var info = (XmlElement)xmlDocument.GetElementsByTagName("Destionation_Text")[i];    // помістити info в змінну

                        // Вставляємо в змінні текст з тегів  
                        string content = info.InnerText;
                        string pasPd = pass.InnerText;
                        string userId = login.InnerText;
                       string FriendId = userid.InnerText;
                       
                        // Заповнюємо поля на формі  
                        tbSource_Login.Text = userId;
                        tbDestinationVK_ID.Text = FriendId;
                        tbSource_PSW.Text = Decrypt(pasPd); // Розшифрували пароль
                        tbDestination_TextMessage.Text = content;
                    }
                }
                catch
                {

                }
            }
            private void btStartMessage_Click(object sender, EventArgs e)
            {
                // Запускает Selenium
                OpenQA.Selenium.Chrome.ChromeDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver();
                System.Threading.Thread.Sleep(1000);
                driver.Navigate().GoToUrl("http://vk.com");
                System.Threading.Thread.Sleep(20000);
                try
                {
                    if (driver.FindElementById("quick_email") != null)
                    {
                        driver.FindElementById("quick_email").SendKeys(tbSource_Login.Text);
                        driver.FindElementById("quick_pass").SendKeys(tbSource_PSW.Text);
                        System.Threading.Thread.Sleep(2000);
                        driver.FindElementById("quick_login_button").Click();
                    }
                }
                catch (OpenQA.Selenium.WebDriverException ex)
                {
                    //MessageBox.Show(ex.Message);
                }

                driver.Navigate().GoToUrl("http://vk.com/id" + tbDestinationVK_ID.Text);
                System.Threading.Thread.Sleep(15000);
                driver.Navigate().GoToUrl("http://vk.com/write" + tbDestinationVK_ID.Text);
                ////зайшли на сторінку повідомлення      
                System.Threading.Thread.Sleep(20000);
                driver.FindElementById("imw_text").SendKeys(tbDestination_TextMessage.Text);
                driver.FindElementById("imw_send").Click();
            }


             private void rdbt_Write_Click(object sender, EventArgs e)
            {
                // Записати дані у файл xml (вже зашифрованим паролем)
                WriteToXmlDocument("DB.xml", tbSource_Login.Text, tbSource_PSW.Text, tbDestinationVK_ID.Text, tbDestination_TextMessage.Text);
            }

             private void VK_Load(object sender, EventArgs e)
             {
                 //Показати дані з xml файл при завантаженні форми 
                 LoadXmlDocument("DB.xml", tbSource_Login.Text, tbSource_PSW.Text, tbDestinationVK_ID.Text, tbDestination_TextMessage.Text);
             }
        }
    }

    Сам проект выглядит так:



    16 февраля 2013 г. 21:57
  • Сохранения данных в XML файл:

    Структура самого XML файла:

    Вот и все.

        Всем спасибо!

    16 февраля 2013 г. 22:06