我想将我的遗留项目selenium库更新为最新的。不幸的是,我面临PageFactory.InitElements方法的问题(默认情况下,Selenium 4中不可用,但DotNetSeleniumExtras.PageObjects中可用)。这是我的示例代码:
class Program
{
static void Main(string[] args)
{
var options = new FirefoxOptions();
options.BrowserExecutableLocation = @"C:\Program Files\Mozilla Firefox\firefox.exe";
var firefoxDriverService = FirefoxDriverService.CreateDefaultService("d:\\gecko");
firefoxDriverService.HideCommandPromptWindow = true;
var driver = new FirefoxDriver(firefoxDriverService, options);
driver.Navigate().GoToUrl("SITE_URL");
var loginPage = new LoginPage(driver);
loginPage.EnterLogin("foo");
}
}
public class LoginPage
{
public IWebDriver Driver { get; private set; }
[FindsBy(How = How.XPath, Using = "//input[contains(@id,'login_btn')]")]
public IWebElement LoginTextField { get; protected set; }
public LoginPage(IWebDriver driver)
{
Driver = driver;
PageFactory.InitElements(Driver, this);
}
public void EnterLogin(string login)
{
LoginTextField.SendKeys(login);
}
}如果我运行这个程序,就会在PageFactory.InitElements行上得到错误:
System.TypeLoadException: Could not load type 'OpenQA.Selenium.Internal.IWrapsElement' from assembly 'WebDriver, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null'如果我将包配置更改为:
DotNetSeleniumExtras.PageObjects 3.11.0
Selenium.WebDriver 4.1.0至:
DotNetSeleniumExtras.PageObjects 3.11.0
Selenium.WebDriver 3.141.0效果很好。似乎新版本的Selenium不喜欢遗留的PageFactory.InitElements。我能做些什么吗?我想要我的页面对象类,就像现在一样,因为有很多类。
发布于 2022-02-05 08:10:29
当您使用SeleniumVersion4.1.0时,不能使用PageFactory类和FindsBy属性来存储元素,而是创建IWebElement/By类型的属性,它解决了这个问题,我希望这样可以解决您的问题。Link to similar issue
https://stackoverflow.com/questions/70969645
复制相似问题