Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium:一旦使用正确的url启动浏览器,就不会执行方法。_Java_Selenium_Testng - Fatal编程技术网

Java Selenium:一旦使用正确的url启动浏览器,就不会执行方法。

Java Selenium:一旦使用正确的url启动浏览器,就不会执行方法。,java,selenium,testng,Java,Selenium,Testng,我的设想是: 包装A有 X类 Y类 类X正在打开一个驱动程序和url,所以我们将方法创建为opendriver(),并将注释设置为@BeforeTest 在Y类中,我创建了一个方法来单击登录链接并将注释设置为@Test 所以,一旦我通过testng.xml运行包,浏览器就会以正确的url启动,但在执行clickon登录链接方法时,我会遇到NullPointer异常 我的问题是:我如何处理上述情况?如何在url打开后执行clickon登录方法如果在标记中添加了相应的类以及带有@Test注释的Tes

我的设想是: 包装A有 X类 Y类

类X正在打开一个驱动程序和url,所以我们将方法创建为opendriver(),并将注释设置为@BeforeTest

在Y类中,我创建了一个方法来单击登录链接并将注释设置为@Test

所以,一旦我通过testng.xml运行包,浏览器就会以正确的url启动,但在执行clickon登录链接方法时,我会遇到NullPointer异常


我的问题是:我如何处理上述情况?如何在url打开后执行clickon登录方法如果在
标记中添加了相应的类以及带有
@Test
注释的TestClass,则将执行带有
@BeforeTest
注释的方法

例如:

public class TestNG1 {
    @BeforeTest
    public void init() {
        System.out.println("Initialized");
    }
}

public class TestNG2 {
    @Test
    public void doSomeThing() {
        System.out.println("Test method");
    }
}
那么testng.xml应该

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="com.sample.TestNG1"/>
       <class name="com.sample.TestNG2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->
使用预初始化驱动程序的依赖类

public class SearchTest extends BaseTest {

    private static final String SEARCH_BTN_NAME = "btnG";
    private static final String SEARCH_BOX_ID = "lst-ib";

    @Test(testName = "search", dependsOnMethods="openGoogle")
    public void search() {
        driver.findElement(By.id(SEARCH_BOX_ID)).sendKeys("Sharath Bhaskara");
        driver.findElement(By.name(SEARCH_BTN_NAME)).click();
    }

}
运行完整测试套件的testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="WebdriverTest">
    <classes>
      <class name="com.sample.project.BaseTest"/>
       <class name="com.sample.project.SearchTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->


注意:
BaseTest
中,WebDriver实例被标记为
protectedstatic
,因为默认情况下不会保存实例变量的状态

你好,莎拉特,谢谢你的回复。我按照你的建议试过了,但还是得到了NullPointerException。当我在类X中单击Login方法时,它就工作了,但是当我在类Y中创建类X的对象并使用类X的对象访问驱动程序时,它就会抛出异常。Akshay,你可能应该对你的驱动程序使用一个
静态
修饰符。我已经编辑了我的答案,并为你的问题添加了完整的代码。
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="WebdriverTest">
    <classes>
      <class name="com.sample.project.BaseTest"/>
       <class name="com.sample.project.SearchTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->