我觉得我在这里缺少一些基本的东西。是否可以传递这样的字符串?我正在尝试制作一个通用的Web scraper,用户可以选择要查找的元素。我当然会收到错误"' By'不包含' elementFind'"的定义
我记得阅读有关创建自定义类的内容,但我不确定是否会让我到达我想去的地方,因为我觉得你必须修改Selenium命名空间。
namespace WebScraper
{
public partial class WebScraper : Form
{
public string url;
public string elementFind;
public string elementString;
public WebScraper()
{
InitializeComponent();
}
private void urlBox_TextChanged(object sender, EventArgs e)
{
url = urlBox.Text;
}
public void elementPicker()
{
switch (comboBox.SelectedIndex)
{
case 0:
elementFind = "ID";
break;
case 1:
elementFind = "Name";
break;
case 2:
elementFind = "Class";
break;
case 3:
elementFind = "XPath";
break;
case 4:
elementFind = "CSS Selector";
break;
case 5:
elementFind = "LinkText";
break;
case 6:
elementFind = "Text";
break;
}
}
private void chromeBtn_Click(object sender, EventArgs e)
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(url);
driver.FindElement(By.elementFind(elementString));
}
}
}
答案 0 :(得分:0)
将全局变量声明为:
By findBy;
修改elementPicker()
这样的内容:
public void elementPicker(string value)
{
switch(comboBox.SelectedIndex)
{
case 0:
findBy = By.Id(value);
break;
//Same for all case
}
}
然后chromeBtn_Click
中的代码看起来像这样:
.......
elementPicker();
driver.FindElement(findBy);
这是参考你发布的代码;我不了解您的应用程序的其他工作流程。
更好的解决方案是编写如下的新函数:
public By GetFindByType(string value)
{
By findBy;
//Similar switch-case as above
return findBy;
}
这样,您就可以避免声明全局变量。