Есть ли способ автоматически захватить все элементы на странице с помощью Selenium? - PullRequest
0 голосов
/ 17 января 2011

При создании тестов для приложений .Net я могу использовать библиотеку White, чтобы найти все элементы данного типа.Затем я могу записать эти элементы в файл XML, чтобы на них можно было ссылаться и использовать для тестов графического интерфейса.Это намного быстрее, чем запись информации каждого отдельного элемента вручную, поэтому я хотел бы сделать то же самое для веб-приложений, использующих Selenium.Я не смог найти никакой информации по этому вопросу.

Я бы хотел иметь возможность искать каждый элемент данного типа и сохранять его информацию (местоположение / XPath, значение и метку), чтобы позднее я мог записать его в текстовый файл.

Вот идеальный рабочий процесс, к которому я пытаюсь добраться:

navigate_to_page(http://loginscreen.com)
log_in
open_account
button_elements = grab_elements_of_type(button) # this will return an array of XPaths and Names/IDs/whatever - some way of identifying each grabbed element

Этот код может быть запущен один раз, и я могу затем запустить его заново, если какие-либо элементы будут изменены, добавлены или удалены.

Затем я могу сделать еще одну пользовательскую функцию, перебирающую массив, сохраняя информацию в формате, который я могу позже легко использовать;в этом случае класс Ruby, содержащий список констант:

LOGIN_BUTTON = "//div[1]/loginbutton"
EXIT_BUTTON = "//div[2]/exitbutton"

Затем я могу написать тесты, которые выглядят так:

log_in # this will use the info that was automatically grabbed beforehand
current_screen.should == "Profile page"

Прямо сейчас, каждый раз, когда я хочу взаимодействоватьс новым элементом мне нужно вручную перейти на страницу, выбрать ее, открыть ее с помощью XPather и скопировать XPath в любой файл, на который я хочу, чтобы мой код просматривал.Это занимает много времени, которое могло бы быть потрачено на написание кода.

Ответы [ 3 ]

1 голос
/ 17 января 2011

В конечном итоге вам нужно извлечь информацию, записанную в тесте, в повторно используемый компонент.

  1. Запишите свои тесты в Firefox с помощью плагина Selenium IDE.
  2. Экспорт записанного теста в файл .cs (при условии .NET, как вы упомянули White, но также доступны параметры экспорта Ruby)
  3. Извлечение идентификаторов XPath / CSS, их инкапсуляция в повторно используемые классы и использование Шаблон PageObject для представления каждой страницы.

Используя вышеописанную технику, вам нужно всего лишь обновить PageObject с обновленными локаторами вместо перезаписи ваших тестов.


Обновление:

Вы хотите автоматизировать часть записи?Звучит неловко.Может быть, вы хотите извлечь все гиперссылки с определенной страницы и выполнить с ними одно и то же действие?

Вам следует использовать объектную модель Selenium для сценариев против DOM.

[Test]
public void GetAllHyperLinks()
{
    IWebDriver driver = new FireFoxDriver();
    driver.Navigate().GoToUrl("http://youwebsite");

    ReadOnlyCollection<IWebElement> query 
             = driver.FindElements( By.XPath("//yourxpath") );

    // iterate through collection and access whatever you want
    // save it to a file, update a database, etc...

}

Обновление 2:

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

При создании локаторов будут некоторые проблемы, особенно если их несколько, но вы должны быть в состоянии продвинуться достаточно далеко, используя локаторы на основе CSS, которые Seleniumsupport.

Например, вы можете найти все гиперссылки, используя xpath "// a", а затем использовать Selenium для создания локатора CSS.Возможно, вам придется настроить локатор в соответствии с вашими потребностями, но в качестве примера локатор может использовать класс css и текстовое значение гиперссылки.

//a[contains(@class,'adminLink')][.='Edit']

// selenium 2.0 syntax
[Test]
public void GetAllHyperLinks()
{
    IWebDriver driver = new FireFoxDriver();
    driver.Navigate().GoToUrl("http://youwebsite");

    ReadOnlyCollection<IWebElement> query 
             = driver.FindElements( By.XPath("//a") );

    foreach(IWebElement hyperLink in query)
    {
        string locatorFormat = "//a[contains(@class,'{0}')][.='{1}']";

        string locator = String.Format(locatorFormat,
                                   hyperlink.GetAttribute("class"),
                                   hyperlink.Value);

        // spit out the locator for reference.
    }

}

Вам все еще нужно будет связать локатор сваш файл кода, но это, по крайней мере, должно помочь вам начать с извлечения локаторов для будущего использования.

Вот пример сканирования ссылок с использованием Selenium 1.0 http://devio.wordpress.com/2008/10/24/crawling-all-links-with-selenium-and-nunit/

0 голосов
/ 18 января 2011

Вам нужно получить весь источник страницы? если это так, попробуйте метод GetHtmlSource http://release.seleniumhq.org/selenium-remote-control/0.9.0/doc/dotnet/html/Selenium.DefaultSelenium.GetHtmlSource.html

0 голосов
/ 17 января 2011

Selenium работает на стороне браузера, даже если вы можете захватить все элементы, нет способа сохранить его в файл. Как я знаю, Selenium не предназначен для такой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...