我尝试过使用WebElement(和IWebElement)和字符串列表,但我一直在收到错误。如何通过classname获取所有元素文本的列表或字符串?我有所有Selenium参考。我需要一些java.util dll吗?
我应该实现foreach循环吗?
IList<IWebElement> all = new IList<IWebElement>();
all = driver.FindElements(By.ClassName("comments")).Text;
错误:无法创建抽象类或接口的实例'System.Collections.Generic.IList'
错误:'System.Collections.ObjectModel.ReadOnlyCollection'不包含'Text'的定义,也没有扩展方法'Text'接受类型
的第一个参数答案 0 :(得分:10)
你可以得到所有这样的元素文本:
IList<IWebElement> all = driver.FindElements(By.ClassName("comments"));
String[] allText = new String[all.Count];
int i = 0;
foreach (IWebElement element in all)
{
allText[i++] = element.Text;
}
答案 1 :(得分:8)
虽然您已经接受了答案,但可以使用LINQ压缩它:
List<string> elementTexts = driver.FindElements(By.ClassName("comments")).Select(iw => iw.Text);
答案 2 :(得分:2)
您无法创建而不是IList<T>
,您必须创建实现该接口的类实例,例如List<T>
:
IList<IWebElement> all = new List<IWebElement>();
但是,您需要.Text
IWebElement
,因此您的列表应该是List<string>
:
IList<string> all = new List<string>();
使用foreach
将项目添加到列表中:
foreach(var element in driver.FindElements(By.ClassName("comments"));
{
all.Add(element.Text);
}
答案 3 :(得分:0)
您也可以这样做,它会解析菜单列表并获取列表文本。
IWebElement menuOptions;
menuOptions = _browserInstance.Driver.FindElement(By.XPath(".//*[@id='xxxxxxxxxxxxxxxxxx']/ul[2]/li[3]"));
IList<IWebElement> list = menuOptions.FindElements(By.TagName("li"));
//// get the column headers
char[] character = "\r\n".ToCharArray();
string[] Split = menuOptions.Text.Split(character);
for (int i = 0; i < Split.Length; i++)
{
if (Split[i] != "")
{
_log.LogEntry("INFO", "column Text", true,
Split + " Text matches the expected:" + Split[i]);
}
}
答案 4 :(得分:0)
我使用过此表格
public List<string> GetValidations()
{
IList<IWebElement> elementList = _webDriver.FindElements(By.Id("validationList")); // note the FindElements, plural.
List<string> validations = new List<string>();
foreach (IWebElement element in elementList)
{
validations.Add(element.ToString());
}
return validations;
}