C# Chrome驱动程序无法定位网页上的元素,即使我之前已经验证过它们
我目前正在学习使用Selenium(Chrome驱动程序)的C#。 我找到了一些可以用于Selenium学习自动化的网站,我有一个非常基本的代码,可以打开url,键入一些内容并搜索结果 然后我想尝试在代码中实现页面对象模型。第一个页面将负责打开url,在搜索框中写入内容并单击“搜索”。 第二个页面将负责收集结果(我的代码中尚未实现) 不幸的是,在对我的代码进行更改(POM的第一种方法)后,我的webdriver:C# Chrome驱动程序无法定位网页上的元素,即使我之前已经验证过它们,c#,selenium-webdriver,selenium-chromedriver,C#,Selenium Webdriver,Selenium Chromedriver,我目前正在学习使用Selenium(Chrome驱动程序)的C#。 我找到了一些可以用于Selenium学习自动化的网站,我有一个非常基本的代码,可以打开url,键入一些内容并搜索结果 然后我想尝试在代码中实现页面对象模型。第一个页面将负责打开url,在搜索框中写入内容并单击“搜索”。 第二个页面将负责收集结果(我的代码中尚未实现) 不幸的是,在对我的代码进行更改(POM的第一种方法)后,我的webdriver: 打开url并加载网页而不查找元素,然后打开一个新的空白窗口并重复三到四次 尝试查找
- Driver.SwitchTo().DefaultContent();-->对我没有任何帮助
- Driver.Manage().Timeouts().ImplicitWait=TimeSpan.FromSeconds(2);--->也没用
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:没有这样的元素:无法找到元素:{”方法“:“id”,“选择器“:“search\u query\u top”}”
有人能帮你解决这个问题吗?或者指出问题的原因是什么?问题的根源是对ChromeDriver寿命的误解。 在接下来的代码行中,您将为驱动程序属性的每次调用创建一个新的驱动程序实例
public IWebDriver Driver
{
get { return new ChromeDriver(); }
}
对于您的示例,您只需创建一次ChromeDriver实例,例如,使用私有属性:
private readonly IWebDriver _driver = new ChromeDriver();
public IWebDriver Driver => _driver;
但是如果有多个页面,这种方法会导致其他错误。因此最好单独创建一个web驱动程序实例,并通过构造函数将其传递给页面。我还怀疑我弄乱了web驱动程序构造函数,但是如果没有帮助,我永远也无法解决这个问题,所以谢谢你。
private readonly IWebDriver _driver = new ChromeDriver();
public IWebDriver Driver => _driver;