簡體   English   中英

如何解決selenium中webdriver的空指針異常

[英]How to solve null pointer exception of webdriver in selenium

這是我在junit中編寫的代碼。 但是它向我顯示了 webdriver 的空指針異常。 我還打印了“驅動程序”。 它打印“drivernull”

*package demo;
import static org.junit.jupiter.api.Assertions.*;
import java.util.concurrent .TimeUnit;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
class Demo1 {
    public WebDriver driver;
    String url="www.google.com";
    @Before
    public void before() {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
          driver = new ChromeDriver();
          driver.get(url);
          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
    @Test
    public void test() throws Exception {


        System.out.println("driver"+driver);
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\'prm\']/div/a")).click();
    }
}*

這是故障跟蹤

java.lang.NullPointerException at demo.Demo1.test(Demo1.java:31) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389) at org .junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115) 在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167) 在 org.junit.jupiter. engine.descriptor.TestMethodTestDescriptor$$Lambda$170/0000000000000000.execute(Unknown Source) at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40) at org.junit.jupitor.jupitor.Testscriptor.engine .invokeTestMethod(TestMethodTestDescriptor.java:163) 在 org.junit.jupit er.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57) at org.junit.platform.engine.support.hierarchical。 HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$139/00000000000000000.execute(Unknown Source) at org.engineplatform.junit. org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77) 處的hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66) org.junit.platform.engine.support.hierarchical.HierarchicalTestutor lambda$null$2(HierarchicalTestExecutor.java:92) 在 org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$142/0000000000000000.accept(Unknown Source) 在 java.util.stream.ForEachOps$OfEachOps$OfEach接受(ForEachOps.java:183 ) 在 java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 在 java.util.Iterator.forEachRemaining(Iterator.java:116) 在 java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java: 1801) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:497) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487) 在 java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForE .java:150) 在 java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:241) 在 java.util.stream。 ReferencePipeline.forEach(ReferencePipeline.java:485) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor $$Lambda$139/0000000000000000.execute(Unknown Source) at org.junit.platform.engine.support.hierarchical.Sing leTestExecutor.executeSafely(SingleTestExecutor.java:66) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77) at org.junit.platform.engine.support.hierarchical.Hierarchical$TestExecutor. null$2(HierarchicalTestExecutor.java:92) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$142/0000000000000000.accept(Unknown Source) at java.util.stream.ForEachOps$ForRef.accept$Of(Unknown Source) ForEachOps.java:183) 在 java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 在 java.util.Iterator.forEachRemaining(Iterator.java:116) 在 java.util.Spliterators$IteratorSpliterator.forEachRemaining (Spliterators.java:1801) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:497) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:487) 在 java.util.stream.ForEachOps$ ForEachOp.evaluateSequential(ForEachOps.java:150) 在 java.util.stream.ForEachOps$ForEachOp$OfRe f.evaluateSequential(ForEachOps.java:173) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:241) at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485) at org.junit.platform .engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$139/00000000000000000) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$139/00000000000000000.execute(orgUnknown .platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66) 在 org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77) 在 org.junit.platform.engine .support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51) 在 org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43) 在 org.junit.platform.launcher.core.DefaultLauncher .execute(DefaultLauncher.java:170) 在 org.junit。 platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90) at org.eclipse.jdt.internal.junit5.runner。 JUnit5TestReference.run(JUnit5TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:538) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 460) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

請檢查 chromedriver.exe 路徑。 它應該在 D: 驅動器中。

我在您的代碼中沒有看到任何不正確的內容。

您的before()中的某些內容似乎拋出異常,因為drivernull 所以get(url)manage()

很可能是get(url) (您可以在堆棧跟蹤中准確地看到)

所以new ChromeDriver()可能會失敗,請檢查您的安裝。

因此,當調用test時, driver成員變量仍然為 null,因此顯示為"null"

入門示例明確了路徑中的協議。 這很可能是無關的,但你應該改變

String url="www.google.com";

String url="http://www.google.com";

請更換

String url="www.google.com";

String url="http://www.google.com";

為什么我們需要這樣做,因為 driver.get 方法沒有在您的 url 之前添加諸如“http”或“https”之類的協議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM