我目前正在使用Selenium(Chrome驱动程序)学习C#。 我找到了一些可以使用Selenium进行自动化学习的网站,并且我有一个非常基本的代码,可以打开url,键入内容并搜索结果。
然后,我想尝试在代码中实现页面对象模型。第一页负责打开网址,在搜索框中写一些内容并单击“搜索”。 第二页将负责收集结果(我的代码中尚未实现)。
不幸的是,在对我的代码实施了更改(POM的第一种方法)后,我的Web驱动程序实现了
我查找了一些类似的问题,并在定位元素之前尝试实现一些代码,但是:
这是可以正常工作的代码:
命名空间Seleniumtest1 { 班级计划 { 静态void Main(string [] args) { var driver = new ChromeDriver();
driver.Url = "http://automationpractice.com/index.php";
var newSearch = driver.FindElement(By.Id("search_query_top"));
newSearch.SendKeys("top");
var searchConfrim = driver.FindElement(By.Name("submit_search"));
searchConfrim.Click();
}
}
}
这是我尝试实现POM之后的代码,但无效:
namespace ConsoleApplication_training
{
class Program
{
static void Main(string[] args)
{
Console.ReadKey();
var page = new WebPage();
page.ClickButton();
}
}
internal class WebPage
{
private IWebDriver driver;
private string websiteUrl;
public IWebDriver Driver
{
get { return new ChromeDriver(); }
}
public string WebsiteUrl
{
get { return "http://automationpractice.com/index.php"; }
set
{
websiteUrl = value;
}
}
public WebPage()
{
Driver.Navigate().GoToUrl(WebsiteUrl);
Driver.SwitchTo().DefaultContent();
Driver.FindElement(By.Id("search_query_top"));
}
public void ClickButton()
{
Driver.FindElement(By.Name("submit_search")).Click();
}
}
}
实际错误是:
“ OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法找到元素:{” method“:” id“,” selector“:” search_query_top“}”
任何人都可以帮助解决此问题或指出问题的可能原因吗?
答案 0 :(得分:1)
问题的根源是对ChromeDriver生命周期的误解。 在接下来的代码行中,您将为Driver属性的每次调用创建驱动程序的新实例。
public IWebDriver Driver
{
get { return new ChromeDriver(); }
}
对于您的示例,您只需创建一次ChromeDriver实例即可,例如,使用私有属性:
private readonly IWebDriver _driver = new ChromeDriver();
public IWebDriver Driver => _driver;
但是,如果您有多个页面,则此方法还会导致其他错误。因此,最好单独创建一个Web驱动程序实例,然后通过构造函数将其传递给页面。