gpt4 book ai didi

java - 当并行测试返回 java.lang.NullPointerException 时调用另一个方法

转载 作者:行者123 更新时间:2023-12-02 10:22:39 27 4
gpt4 key购买 nike

我在使用 Java、Selenium 和 TestNG 执行并行测试时遇到问题。我有两种测试方法,可以在谷歌上搜索两个不同的关键字。我想要由两种测试方法调用的第三种方法,以避免重复类似的代码。

public class googleTestClass extends Methods{

@Test
public void executeGoogle() throws InterruptedException {
googleTestClass object;
object = new googleTestClass();
object.goToURL("https://www.google.com");
object.enterValue("name","q","google test 1");
}

@Test
public void test1() throws InterruptedException {

googleTestClass object1;
object1 = new googleTestClass();
object1.launchBrowser();
object1.executeGoogle();
}

@Test
public void test2() throws InterruptedException {

googleTestClass object2;
object2 = new googleTestClass();
object2.launchBrowser();
object2.executeGoogle();
}
}

当我的代码命中 object1.executeGoogle(); 时和 object2.executeGoogle();命令,它返回 java.lang.NullPointerException。我知道该错误与该对象有关,但我不确定如何继续。

以下是正在使用的其他类。

方法类:

// import statements

public class Methods {

public WebDriver driver;

public void launchBrowser() {

System.setProperty("webdriver.chrome.driver","C:\\chromedriver_win32\\chromedriver.exe");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
driver = new ChromeDriver();
}

public void goToURL(String url) {
driver.get(url);
}

public void enterValue(String htmltype, String identifier, String value) throws InterruptedException {
if (htmltype == "id") {
WebElement element = driver.findElement(By.id(identifier));
element.clear();
element.sendKeys(value);
element.submit();
}
if (htmltype =="name") {
WebElement element = driver.findElement(By.name(identifier));
element.clear();
element.sendKeys(value);
element.submit();
}

Thread.sleep(3000);
}

}

XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">

<test thread-count="5" name="Test" parallel="methods">
<classes>
<class name="webDrivertests.googleTestClass">
<methods>
<include name ="test1"/>
<include name ="test2"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

如有任何帮助,我们将不胜感激!

最佳答案

看起来您正在使用一个方法,executeGoogle(),它用 @Test 注释,但它不是一个测试。去掉注释

您正在尝试从 googleTestClass 内部实例化 googleTestClass(应该有一个大写的 G,因此 GoogleTestClass)。这似乎是错误的

您不需要 googleTestClass 的实例来调用Methods 类中的方法。您可以直接调用它们,因为您的 googleTestClass 继承了它们

当此类包含特定于浏览器测试的方法时,Methods 是一个非常通用的名称。您可以将其称为 BrowserTestBaseFunctions 或类似的名称吗?

我还建议您的executeGoogle()函数进入Google特定的类,该类可以从BrowserTestBaseFunctions类继承...也就是说,如果executeGoogle实际上是特定于Google的,否则您可以将其称为loadUrl并放入BrowserTestBaseFunctions params 使其更可重用

关于java - 当并行测试返回 java.lang.NullPointerException 时调用另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54222490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com