Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#字符串转换为lamda表达式_C#_Selenium_Slamdata - Fatal编程技术网

C#字符串转换为lamda表达式

C#字符串转换为lamda表达式,c#,selenium,slamdata,C#,Selenium,Slamdata,我正在处理一个查询web元素的方法。我想让用户选择他们想要选择的元素。 所以我有以下代码: public static List<IWebElement> getItemsByType(IWebDriver driver, string typename, Expression<Func<IWebElement, bool>> expression) { return driver.FindElements(By.TagName(typename)).T

我正在处理一个查询web元素的方法。我想让用户选择他们想要选择的元素。 所以我有以下代码:

public static List<IWebElement> getItemsByType(IWebDriver driver, string typename, Expression<Func<IWebElement, bool>> expression)
{
   return driver.FindElements(By.TagName(typename)).ToList().AsQueryable().Where(expression).ToList();
}
公共静态列表getItemsByType(IWebDriver驱动程序,字符串类型名,表达式)
{
返回驱动程序.FindElements(按.TagName(typename)).ToList().AsQueryable().Where(表达式).ToList();
}
下面是表达式示例:

Expression<Func<IWebElement, bool>> expression =  t => ((t.GetAttribute("type").ToString() == "button") && (t.FindElements(By.XPath("ancestor::table")).Count == 0));
Expression Expression=t=>((t.GetAttribute(“type”).ToString()=“button”)&&(t.FindElements(By.XPath(“祖先::表”)).Count==0));
第一步,我想从文本框中读取这种lamda表达式。根本问题是:如何将字符串转换为这种表达式


任何帮助都是感激的

允许用户注入代码是一个巨大的安全风险…@Sweeper,谢谢你的建议。为了进一步,我将使用UI生成这种字符串。但是这个问题是目前最大的风险,我不知道是否可以解决。试着为表达式创建自己的语法并解析它们。通过这种方式,您可以限制人们可以做的事情。@Sweeper,您可以分享更多关于创建我自己的语法的信息吗?因为我使用selenium内部方法来查找元素。似乎自定义语法也面临将字符串转换为表达式的问题。我是不是搞错了?您仍然需要解析表达式,是的,但是现在您可以限制用户编写的内容。您可以只使用两个可用的“函数”-
GetAttribute
FindElementById
。如果您试图解析并运行C#代码,那么用户可以在C#中编写他们想要的任何东西。