我想将我的遗留项目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
发布于 2022-02-03 16:43:53
也许这能解决你的问题。进口情况如下:
import org.openqa.selenium.support.PageFactory;Page初始化如下(我已经对其进行了配置,以便您只需复制/粘贴它):
public LoginPage (){
        PageFactory.initElements(driver, this);
    }https://stackoverflow.com/questions/70969645
复制相似问题