Разделение C# кода

  • Автор темы Dronhik
  • Дата начала
D

Dronhik

Guest
Здравствуйте. Автоматизирую андройд приложение по данной статье: Есть с# код для автоматизации приложения на андроид, код заканчивается тем, что кликаем для подтверждения отправки проверочного смс. Следовательно далее нам нужно завершить этот экшен С# и выйти для получения смс, но потом ввести этот код в приложении нужно опять на C#. Ставлю новый экшен для этого действия именно(ввод смс), команда вот такая
C#:
driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
После чего в логе ошибка компиляции кода: CS0103 Имя driver отсутствует в текущем контексте.
Не особо кодер, но понимаю, что driver не определено в текущем кубике, но как решить не знаю.

Подскажите как решить данную проблему, заранее спасибо)
 
Последнее редактирование модератором:

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
А это все содержание кубика? или там еще что то написано?
 
D

Dronhik

Guest
А это все содержание кубика? или там еще что то написано?
Ну который второй(после получения смс) да. А в первом(которое открывает приложение и доходит до отправки смс) вот такой код
C#:
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".Активное окно"); // активное окно
cap.SetCapability("unicodeKeyboard", "true");

AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]")));
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").Click();


wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//Класс[contains(@resource-id, 'Айди')]")));
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["number"].Value);


driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").Click();
 

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
Тогда вам во втором кубике нужно сначала добавить эту строчку
C#:
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
Потом ваша строчка ))
 
D

Dronhik

Guest
Тогда вам во втором кубике нужно сначала добавить эту строчку
C#:
AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
Потом ваша строчка ))
Да я пробовал методом тыка) но тогда ошибка: Имя cap отсутствует в текущем контексте.
И прошлая ошибка, тож остается((
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну так создай что отсутствует
 

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
C#:
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".Активное окно"); // активное окно
cap.SetCapability("unicodeKeyboard", "true");

AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
Да извеняюсь, не досмотрел )) Все содержание в ваш кубик скопируйте все будет работать
 
D

Dronhik

Guest
C#:
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)
cap.SetCapability("platformVersion", "7.1");// версия платформы (тоже любая)
cap.SetCapability("platformName", "Android");//имя платформы
cap.SetCapability("appPackage", "Имя"); // пространство имен используемое приложением
cap.SetCapability("appActivity", ".Активное окно"); // активное окно
cap.SetCapability("unicodeKeyboard", "true");

AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap); // инициализируем экземпляр класса драйвера с настроечками
driver.FindElementByXPath("//КлассОбъекта[contains(@resource-id, 'АйдиОбъекта')]").SendKeys(project.Variables["kod"].Value);
Да извеняюсь, не досмотрел )) Все содержание в ваш кубик скопируйте все будет работать

И так тоже делал, этот код открывает приложение заново)
В статье об автоматизации андройд было написано
 
D

Dronhik

Guest
В итоге если во втором кубике будет такой код:
C#:
DesiredCapabilities cap = new DesiredCapabilities(); // экземпляр класса настроек
cap.SetCapability("deviceName", "Insta"); // имя девайся (абсолютно любое)


AndroidDriver<IWebElement> driver = new AndroidDriver<IWebElement>(new Uri("http://127.0.0.1:4723/wd/hub"), cap);
driver.FindElementByXPath("//Класс[contains(@resource-id, 'Айди')]").SendKeys(project.Variables["kod_podtverd"].Value);

То шибка следующая:
Выполнение действия CSharp OwnCode. An unknown server-side error occurred while processing the command. Original error: The desired capabilities must include either an app, appPackage or browserName
 

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
Ну вот смотри:
driver - этот объект у тебя создается в первом кубике, и его нужно как то импортнуть во второй, как это сделать без OwenCodeUsing я не представляю )). На мой взгляд, тебе стоит пообщаться в исходной теме чтоб тебе помогли те кто с этим вопросом знаком и использует в своих решениях
 
D

Dronhik

Guest
Ну вот смотри:
driver - этот объект у тебя создается в первом кубике, и его нужно как то импортнуть во второй, как это сделать без OwenCodeUsing я не представляю )). На мой взгляд, тебе стоит пообщаться в исходной теме чтоб тебе помогли те кто с этим вопросом знаком и использует в своих решениях
Да, там я тоже уже написал)
А про это можно подробнее OwenCodeUsing ?(
Может возможно передать его как-то в переменной или связать экшены как-то
 

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
А про это можно подробнее OwenCodeUsing ?(
Тут нужны знания начального уровня по C# и .net в частности... Думаю это вам не подойдет, раз у вас минимальные познания в кодинге.
Попробуйте реализовать нужный вам ф-л в рамках одного снипета, тогда вопрос с передачей драйвера решится сам собой.

Ответьте себе на вопрос: "А зачем мне два блока Свой код в проекте? " и если будет понимание почему вы разделили код на два снипета тогда и будет понимание как исправить это ))
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну так напиши челолвеку класс, пусть к нему обращается, ну в так правильно тебя ТС сказали, хотишь снипет пиши в нужную ветку
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 693
Благодарностей
1 872
Баллы
113
нужно завершить этот экшен С# и выйти для получения смс, но потом ввести этот код в приложении нужно опять на C#. но как решить не знаю.
Подскажите как решить данную проблему, заранее спасибо)
Тут надо разделять на отдельные методы и переносить в общий код. Без знаний C# тут никак.
Или просто в одном блоке кода все пишите без выхода из экшена, а внутри код получения и ввода смс.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)