首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >含硒PageFactory.InitElements 4

含硒PageFactory.InitElements 4
EN

Stack Overflow用户
提问于 2022-02-03 10:29:25
回答 2查看 1.7K关注 0票数 0

我想将我的遗留项目selenium库更新为最新的。不幸的是,我面临PageFactory.InitElements方法的问题(默认情况下,Selenium 4中不可用,但DotNetSeleniumExtras.PageObjects中可用)。这是我的示例代码:

代码语言:javascript
运行
复制
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行上得到错误:

代码语言:javascript
运行
复制
System.TypeLoadException: Could not load type 'OpenQA.Selenium.Internal.IWrapsElement' from assembly 'WebDriver, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null'

如果我将包配置更改为:

代码语言:javascript
运行
复制
DotNetSeleniumExtras.PageObjects 3.11.0
Selenium.WebDriver 4.1.0

至:

代码语言:javascript
运行
复制
DotNetSeleniumExtras.PageObjects 3.11.0
Selenium.WebDriver 3.141.0

效果很好。似乎新版本的Selenium不喜欢遗留的PageFactory.InitElements。我能做些什么吗?我想要我的页面对象类,就像现在一样,因为有很多类。

EN

回答 2

Stack Overflow用户

发布于 2022-02-05 08:10:29

当您使用SeleniumVersion4.1.0时,不能使用PageFactory类和FindsBy属性来存储元素,而是创建IWebElement/By类型的属性,它解决了这个问题,我希望这样可以解决您的问题。Link to similar issue

票数 1
EN

Stack Overflow用户

发布于 2022-02-03 16:43:53

也许这能解决你的问题。进口情况如下:

代码语言:javascript
运行
复制
import org.openqa.selenium.support.PageFactory;

Page初始化如下(我已经对其进行了配置,以便您只需复制/粘贴它):

代码语言:javascript
运行
复制
public LoginPage (){
        PageFactory.initElements(driver, this);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70969645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档