我正在进行自动化测试,我可以使用以下内容在页面上获取所需的元素列表:
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();
//...
}
我想知道是否有办法限制页面对象中初始化列表的大小,因为我只需要大约30个这些元素,这将大大加快测试速度。我已经尝试在调用new
之前直接在页面对象构造函数中使用PageFactory.InitElements(...)
关键字初始化具有特定容量的列表,但似乎每次驱动程序查找元素时都会实例化一个新列表,这样这样做没有影响。
有任何建议或甚至可能吗?
编辑:这适用于iOS手机应用程序,我们最终希望能够在测试运行开始时随机选择一种语言。
答案 0 :(得分:2)
您似乎只对第二个元素感兴趣。 我建议创建以下属性:
public IWebElement CountryMenu {
get {
return driver.FindElement(By.CssSelector(".btn_MenuElement:nth-of-type(1)"));
}
}
&#34;:第n的式&#34;是一个css选择器,用于通过索引获取集合中的元素。
或者,您可以创建一个方法来按索引检索项目:
public IWebElement GetMenu(int index) {
return driver.FindElement(By.CssSelector(
string.Format(".btn_MenuElement:nth-of-type({0})", index)
));
}
*注意:我使用的是class而不是id,因为拥有多个具有相同id的元素是没有意义的。