Search code examples
javaseleniumgoogle-chromeselenium-chromedriverpage-factory

Version update to SELNEIUM 4.7.0 throwing NoSuchMethod Exception for Pagefactory


I'm changing my selenium porject from 3.141 to 4.7.0 but i'm seeing NoSuchElementException on PageFactory Initialization.

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.7.1</version>
        </dependency>
public WebElementsLogin(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(this.driver, this);
    }
java.lang.NoSuchMethodError: 'void org.openqa.selenium.support.PageFactory.initElements(org.openqa.selenium.SearchContext, java.lang.Object)'

Solution

  • Using selenium 4.7.1 and JDK 11:

           <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>4.7.1</version>
            </dependency>
    
    public class Google {
        private WebDriver driver;
        @FindBy(name = "q")
        private WebElement searchField;
        
        public Google(WebDriver driver){
            this.driver = driver;
            PageFactory.initElements(driver, this);
        }
    
        public  void searchFor(String text){
            searchField.sendKeys(text);
            searchField.sendKeys(Keys.ENTER);
        }
    
        public void navigateTo(){
            driver.get("https://google.com");
        }
    
        public static void main(String[] args) {
            WebDriverManager.chromedriver().setup();
            WebDriver chrome = new ChromeDriver();
            Google google = new Google(chrome);
            google.navigateTo();
            google.searchFor("Selenium");
    
        }
    }
    

    Everything works as expected.

    Correct this line:

    PageFactory.initElements(this.driver, this);