Java Selenium网格WebElement获取空值

Java Selenium网格WebElement获取空值,java,selenium-webdriver,Java,Selenium Webdriver,我想对任何浏览器和操作系统使用selenium网格。然而,我在使用RemoteWebDriver时遇到了一个问题。当我在本地使用firefox驱动程序或任何其他WebDriver类型时,我的代码(非常简单,例如单击网页上的按钮)成功运行,但当驱动程序变为RemoteWebDriver时,相同的代码不起作用。它为WebElements提供了错误,因为它找到了元素,但随后立即将其值(即id)设置为null。因此,该按钮无法单击,或者我无法获取其任何属性。注意:我使用了很多版本的grid和seleni

我想对任何浏览器和操作系统使用selenium网格。然而,我在使用RemoteWebDriver时遇到了一个问题。当我在本地使用firefox驱动程序或任何其他WebDriver类型时,我的代码(非常简单,例如单击网页上的按钮)成功运行,但当驱动程序变为RemoteWebDriver时,相同的代码不起作用。它为WebElements提供了错误,因为它找到了元素,但随后立即将其值(即id)设置为null。因此,该按钮无法单击,或者我无法获取其任何属性。注意:我使用了很多版本的grid和selenium(2.46,2.53.0,2.53.1,3.3.1,3.4等),并且在不同的机器上使用了不同的操作系统和浏览器

package test.java.TestNG;

import org.junit.After;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class myGrid
{
    WebDriver driver;

    String myURL = "http://www.hepsiburada.com";

    @Test
    public void calculatepercent() throws InterruptedException, MalformedURLException {

        System.setProperty("webdriver.gecko.driver", "/home/geckodriver");
        DesiredCapabilities capabilities=DesiredCapabilities.firefox();
        capabilities.setCapability("marionette", true);

        String Hub = "http://IP:5555/wd/hub"; // IP is my local Ip

        driver = new RemoteWebDriver(new URL(Hub),capabilities);

        driver.manage().window().maximize();

        driver.navigate().to(myURL);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        WebElement myElement = driver.findElement(By.id("buttonProductSearch"));

        myElement.click();
    }

    @After
    public void closeBrowser()
    {
        driver.quit();
    }
}
在节点终端上发布的错误:

org.openqa.selenium.WebDriverException: Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'mek', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.8.0-52-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities [{moz:profile=/tmp/rust_mozprofile.5ZZmDH4nMl5L, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, webdriver.remote.sessionid=3738002e-e906-42b7-8657-b427981f1cb0, acceptInsecureCerts=true, browserVersion=53.0.2, platformVersion=4.8.0-52-generic, moz:processID=6799.0, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, platformName=linux, cssSelectorsEnabled=true}]
Session ID: 3738002e-e906-42b7-8657-b427981f1cb0

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82)
    at test.java.TestNG.myGrid.calculatepercent(myGrid.java:40)
    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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
    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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.NullPointerException
    at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30)
    at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:22)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

java.lang.NullPointerException 位于org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30) 位于org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:22) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)处 位于org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 运行(Thread.java:748) 14:23:59.667警告-异常:null

IDE错误(Intellij Idea):

org.openqa.selenium.WebDriverException: Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'mek', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.8.0-52-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities [{moz:profile=/tmp/rust_mozprofile.5ZZmDH4nMl5L, rotatable=false, timeouts={implicit=0.0, pageLoad=300000.0, script=30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, webdriver.remote.sessionid=3738002e-e906-42b7-8657-b427981f1cb0, acceptInsecureCerts=true, browserVersion=53.0.2, platformVersion=4.8.0-52-generic, moz:processID=6799.0, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, platformName=linux, cssSelectorsEnabled=true}]
Session ID: 3738002e-e906-42b7-8657-b427981f1cb0

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82)
    at test.java.TestNG.myGrid.calculatepercent(myGrid.java:40)
    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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
    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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.NullPointerException
    at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30)
    at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:22)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

WebDriver
驱动程序类型更改为
RemoteWebDriver
我也尝试过,但没有解决,再次出现相同的错误。您可以共享带有@before的代码吗?这是我的全部代码,我的代码中没有任何@before参数。这不是必须的,当使用firefoxdriver而不是我提到的remotewebdriver时,这段代码可以正常工作。org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30)中的org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:22)中的java.NullPointerExceptionjava.util.concurrent.FutureTask.run(FutureTask.java:266)在org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.lang.Thread.run(ThreadPoolExecutor.java:617)在java(Thread.java:748)14:23:59.667警告-异常:null