Я работаю на автоматизированный тест, и я могу получить список элементов, которые мне нужно на странице, используя следующее:Есть ли способ ограничить размер списка элементов в объекте страницы?
using System.Collections.Generic;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
namespace iOSAutomation.PageObjects
{
public class CCLMenu
{
private IWebDriver driver;
// Menu element buttons
[FindsBy(How = How.Id, Using = "btn_MenuElement")]
public IList<IWebElement> menuElement_buttons;
// Constructor
public CCLMenu(IWebDriver driver)
{
this.driver = driver;
PageFactory.InitElements(driver, this);
}
}
}
Это получает список из 166 элементов, хотя и занимает некоторое время, чтобы найти их всех и выберите один из списка, чтобы щелкнуть. Вот пример теста:
[TestMethod]
public void SelectCCLOptions()
{
//...
// THIS CURRENTLY GETS A LIST OF 166 ELEMENTS; TODO - Find a way to limit list size
Debug.WriteLine("Array count: " + cclMenu.menuElement_buttons.Count);
Assert.IsTrue(isElementPresent(driver, cclMenu.menuElement_buttons.ElementAt(1), 60), "Unable to find country menu element button on " + cclMenu.ToString());
cclMenu.menuElement_buttons.ElementAt(1).Click();
//...
}
мне интересно, если есть способ ограничить размер списка инициализируется в Пажеском Object, потому что мне нужно только около 30 из этих элементов, и было бы значительно ускорить тест. Я попытался инициализировать список с помощью ключевого слова new
непосредственно в конструкторе объекта страницы с определенной емкостью перед вызовом PageFactory.InitElements(...)
, но кажется, что новый список создается каждый раз, когда драйвер ищет элементы, поэтому это не влияет.
Любые предложения или это даже возможно?
Редактировать: Это приложение для телефона iOS, и в конце концов мы хотим, чтобы в начале нашего тестового прогона можно было выбрать язык наугад.
Прежде чем мы перейдем к вопросу, который вы задали, возникает проблема (если я не ошибаюсь) 166 дубликатов идентификаторов на вашей странице. Если это правда, вам нужно поговорить с разработчиками. http://softwareengineering.stackexchange.com/questions/127178/two-html-elements-with-same-id-attribute-how-bad-is-it-really – jibbs
Добавить [CacheLookup] после FindBys. Это будет кэшировать результаты, а не искать элементы снова. Если у вас есть какой-то вызов ajax на этот элемент, вы можете столкнуться с проблемами с кешированием. Если вам нужен уменьшенный набор результатов, вам нужно будет точно настроить свою стратегию локатора или заставить своих разработчиков добавлять уникальные идентификаторы, как было предложено выше. Просто идея, возможно, использует локатор xpath и ищет текст кнопки, который начинается с определенного набора алфавитов, например a, b, c, d ... – Grasshopper
@jibbs Это то, что я на самом деле попросил их сделать так, чтобы я мог получить весь список элементов меню, используя один идентификатор в моем объекте страницы. – Blink