Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как "поймать" текст и использовать его далее в программе?


(kokos_test) #1

Использую Microsoft Visual Studio 2010 + Nunit + Selenium WebDriver + Firefox

Обращаюсь по ссылке к скрипту driver.Navigate().GoToUrl(baseURL + "/www/dev/ajs.php");. Тот в ответ присылает мне конструкцию с JavaScript типа (приведу небольшой отрывок, так как кода очень много)

window.targ.lib.registerAction("http://delivery.adserver.local/Registrator/Save", 162, 11411, "1,2,3,4,5,6,7,8,9", 2, (typeof(container)!="undefined")?container:document.getElementById("banner_531af2791a"), "531af2791a", 1);

Сама страница, которая открывается после обращения к скрипту выглядит вот так

<html>

<head></head>

<body>

<pre> Тут много JavaScript, в том числе строка window.targ.lib.registerAction("http://delivery.adserver.local/Registrator/Save", 162, 11411, "1,2,3,4,5,6,7,8,9", 2, (typeof(container)!="undefined")?container:document.getElementById("banner_531af2791a"), "531af2791a", 1);

</pre>

</body>

</html>

Как мне выдернуть кусок текста из тега <pre>, конкретно мне нужен набор 162, 11411, "1,2,3,4,5,6,7,8,9" (просто он всегда разный), что бы использовать потом этот набор для вставки в различные места в коде теста?

Заранее спасибо за ответ!


(apetrovskiy) #2

([\d]+?[\,][\s])+?[\"]([\d]+?[\,]?){0,10}[\"]

оно?

Можете кинуть файл странички, лучше несколько вариантов - возможно, надо будет уточнить выражение.

Кстати, а что тут делает NUnit? В 10-й студии уже вполне работоспособный MSTest, зачем кота с ужом скрещивать?


(kokos_test) #3

А какой командой положить текст с HTML страницы в массив, что бы потом уже из него выдергивать нужные данные с помощью регулярки??? 

Можете написать пример кода C#?


(apetrovskiy) #4

Код страницы - это строка, просто большая строка. Массив строк не нужен - а вдруг он вернёт ваш список на нескольких строках? А это дополнительные усилия по переделки выражения на многострочность (кстати, мой пример наверняка не потянет многострочность, хотя мне припоминается, что в классе Regeх есть настройка, чтобы это обойти).

Сам код будет что-то вроде:

using System.Text.RegularExpressions; // шарпдевелоп сам добавит юзинг

            string pageSource = "<html><body>a aa aaa</body></html>"//driver.PageSource;
            string regExp = "([a]{2,3})+?";
            Console.WriteLine("what the Value property returns");
            Console.WriteLine(Regex.Match(pageSource, regExp).Value);
            Console.WriteLine("enumerating groups:");
            foreach (var group in Regex.Match(pageSource, regExp).Groups) {
                Console.WriteLine(group);
            }

Если интересуют познания в области регекспов, а Фридл сложен или лениво читать, не пожалейте 50-100 руб. на книжку Бена Форта - в своё время дала мне quick start для практического применения.


(player1) #5

в Java получение исходного кода текущей страницы driver.getPageSource(). Думаю, в C# как то похожим образом


(apetrovskiy) #6

абсолютно аналогично, только проперти оформлены классически, get не нужен, как и скобки:

driver.PageSource