无法调用“org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)”,因为“this.driver”为空

问题描述 投票:0回答:10

当我尝试在

testNg
null pointer exception
中运行以下代码时,如
Eclipse

所示
public class ImgDDChkbxRadio  {
    WebDriver driver;
    
    @BeforeTest
    public void LaunchBrowser()
    {
        System.setProperty("webdriver.chrome.driver","F:\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("http://www.leafground.com/");
    }   
    @Test
    public void Img()
    {   
        driver.findElement(By.xpath("//img[@src='images/image.png']")).click();
        driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click();
        driver.navigate().back();
        driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click();
        
    }
}
java selenium
10个回答
1
投票

只需从 LaunchBrowser() 中删除 WebDriver,我希望这样 会为你工作;)

    public class ImgDDChkbxRadio  {
    WebDriver driver;
    
    @BeforeTest
    public void LaunchBrowser()
    {
        
    System.setProperty("webdriver.chrome.driver","/Users/chrome/chromedriver");
        driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("http://www.leafground.com/");
    }   
    @Test
    public void Img()
    {   
        driver.findElement(By.xpath("//img[@src='images/image.png']")).click();
        driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click();
        driver.navigate().back();
        driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click();
        
    }
}

1
投票

自从我发表此评论以来,我学到了。

我的新建议是 - 删除文件开头的所有导入并再次添加它们。请谨慎对待正确的导入 - 尤其是测试套件的版本 - 当代码使用几个不同版本时可能会出现问题。

如何添加导入?将光标移到标记的类、方法等上,并根据您的 IDE 建议做出反应(对于 Windows 版 IntelliJ,按 Alt + Enter)。

旧且可能不安全的解决方法:

我的旧建议可以解决您的问题,但可能会产生很多新实例,我想这不是明智之举。测试会起作用,但更像是副产品。

在您的

LaunchBrowser()
方法中使用 ChromeDriver 之前先创建一个实例:

public class ImgDDChkbxRadio  {
    WebDriver driver = new ChromeDriver();
    
    @BeforeTest
    public void LaunchBrowser()
    {
        System.setProperty("webdriver.chrome.driver","F:\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("http://www.leafground.com/");
    }   
    @Test
    public void Img()
    {   
        driver.findElement(By.xpath("//img[@src='images/image.png']")).click();
        driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click();
        driver.navigate().back();
        driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click();
        
    }
}

我认为这可能是JUnit 5中注释(@)中所做的一些更改的结果。


0
投票

可能是该网站未加载 - 您可以手动启动该网站吗?

如果是,请尝试以下操作:

  • 将WebDriver对象设为静态(变量名前写static)
  • 使用浏览器打开站点后,尝试将 Thread.Sleep(5000) 添加到 LaunchBrowser 方法

0
投票

您正在 WebDriver 接口的帮助下创建浏览器的对象。

WebDriver{ 驱动程序 = new new EdgeDriver();} 但该驱动程序的范围仅限于方法内。要使用它,您必须公开声明它。

驱动程序的生命周期仅在WebDriver接口中。 制作:driver=new EdgeDriver();

只能解决你的问题: java.lang.NullPointerException:无法调用“org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)”,因为“this.driver”为空

package ADUMMYExersice;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class stackoverflowNull {
    WebDriver driver;
        
        @BeforeTest
        public void LaunchBrowser()
        {
            System.setProperty("webdriver.edge.driver", "C:\\Selenium Files\\BrowserExe\\msedgedriver.exe");
             
            driver=new EdgeDriver();
            driver.manage().window().maximize();
            driver.get("http://www.leafground.com/");
        }   
        @Test
        public void Img()
        {   
            driver.findElement(By.xpath("//img[@src='images/image.png']")).click();
            driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click();
            driver.navigate().back();
            driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click();
               }
    }

0
投票

我有类似的问题。 我变了 “WebDriver 驱动程序” “公共静态 Webdriver”。

这对我有用。


0
投票

无法调用“org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)”,因为“this.driver”为空

当我从测试用例运行时,它工作正常,但是当我尝试从 Testrunner.class 运行时,我遇到了以上错误


-1
投票

这也可能是您的 Chrome 浏览器的问题 - 使用 Firefox 尝试,但仍然无法正常工作,然后尝试更改您的工作区。 遇到同样的问题浪费了 6 个小时的尝试和搜索。我用 Firefox 工作过。


-1
投票

受保护的静态WebDriver驱动程序; 使用上面的内容并检查您是否在任何其他课程中使用过网络驱动程序?


-1
投票

我有两个类,我给了一个变量名称为

public WebDriver driver;
,但它不起作用,它向我抛出了一条错误消息:

线程“main”中出现异常java.lang.NullPointerException:无法调用“org.openqa.selenium.WebDriver.findElement(org.openqa.selenium.By)”,因为“this.driver”为空。

之后我找到了一个答案,我们需要在变量之前给出 static

public static WebDriver driver;


-1
投票

我们创建了一个测试脚本并使用测试我在这里面临中心代码`这种问题请检查我的代码并解决我的问题 打包测试用例;

导入 org.openqa.selenium.By; 导入 org.testng.annotations.Test;

导入base.Basetest;

公共类 MyFirstTestFW 扩展 Basetest{

@Test

public static void LoginTest() throws InterruptedException
{
    


System.out.println("Clicked Successfully");
driver.findElement(By.linkText("Sign in")).click(); //locals----properties
driver.findElement(By.id("login_id")).sendKeys("[email protected]");
driver.findElement(By.xpath("//span[normalize-space()='Next']")).click();
Thread .sleep(4000);
driver.findElement(By.xpath("//input[@id='password']")).sendKeys("Vaishu@123");
Thread .sleep(4000);
driver.findElement(By.xpath("//button[@id='nextbtn']//span[contains(text(),'Sign in')]")).click();
Thread .sleep(4000);


}

}

© www.soinside.com 2019 - 2024. All rights reserved.