java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create at org.openqa.selenium.remote.service.DriverService.wa
java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create at org.openqa.selenium.remote.service.DriverService.wa
问题: 我是 selenium 和自动化测试的初学者,我正在使用 java、TestNG 和 maven 编写 selenium 脚本。当我将所有内容都写在一个 class 中时,一切正常,但我想要一个包含所有对象的包,一个用于测试的包,以及具有主要设置的 Base Class。该项目将为网站的每个页面包含一个 class,并为所有测试包含一个 class。
当我尝试修改某些内容时,另一个错误来自 BaseClass 中的构造函数,我不知道为什么
基础class是这样的:
我试过的
public BaseClass(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
或 PagegeFactory.initElements(new AjaxElementLocatorFactory(driver, TimeoutValue), this);
并没有奏效。
package com.selenium.Base;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.*;
import page_objects.AnalizesiPreturi;
import java.util.concurrent.TimeUnit;
public class BaseClass {
public WebDriver driver;
protected static AnalizesiPreturi baseClass;
public BaseClass(WebDriver driver) { }
public BaseClass() { }
@BeforeMethod
public void setUp() {
System.setProperty("webdriver.driver.chrome", "C://SeleniumWebdrivers//chromedriver.exe");
driver = new ChromeDriver();
//implicit wait
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.MINUTES);
//launch URL
driver.get("http://googl.com/");
//scroll
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,500)", "");
//WebDriverWailt for all objects located by class name
WebDriverWait wbd = new WebDriverWait(driver, 1000);
wbd.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className("AnalizesiPreturi")));
}
@AfterMethod
public void tearDown(){
driver.close();
}
}
页面对象class这是来自另一个包
package page_objects;
import com.gargoylesoftware.htmlunit.Page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import com.selenium.Base.BaseClass;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
public class AnalizesiPreturi extends BaseClass {
public AnalizesiPreturi(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@FindBy(css = "#onetrust-accept-btn-handler")
WebElement cookie;
@FindBy(css = "#footable_501 > tbody > tr.ninja_table_row_0.nt_row_id_77 > td.ninja_column_1.ninja_clmn_nm_pret.footable-last-visible")
WebElement plus1Button;
@FindBy(css = "#footable_501 > tbody > tr.ninja_table_row_1.nt_row_id_78 > td.ninja_column_1.ninja_clmn_nm_pret.footable-last-visible")
WebElement plus2Button;
@FindBy(css = "#calculator > div.body > div.products > div.innerProducts > div > div.right")
WebElement minusButton;
@FindBy(css = "#show-hide > div.hide")
WebElement closeButton;
@FindBy(css = "#footable_501 > thead > tr.footable-filtering > th > form > div > div > input")
WebElement search;
@FindBy(css = "#footable_501 > thead > tr.footable-filtering > th > form > div > div > div > button.btn.btn-primary")
WebElement findButton;
@Test
public AnalizesiPreturi addAnalises(){
PageFactory.initElements(driver, this);
cookie.click();
plus1Button.click();
plus2Button.click();
closeButton.click();
return null;
}
}
最后一个是测试包
package Test;
import com.selenium.Base.BaseClass;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
import page_objects.AnalizesiPreturi;
import page_objects.Centers;
public class TestsPage extends BaseClass {
public TestsPage(WebDriver driver) {
super(driver);
}
public WebDriver getDriverInstance() {
return driver;
}
@Test
public void TestAnalises()throws Exception{
//Tests
driver.get("");
AnalizesiPreturi analise = new AnalizesiPreturi(driver);
analise.addAnalises();
}
public void TestCenters(){
Centers centre = new Centers(driver);
centre.checkCenters();
}
}
下面是收到的异常:
org.testng.TestNGException:
An error occurred while instantiating class Test.TestsPage. Check to make sure it can be instantiated
at org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:134)
at org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79)
at org.testng.internal.objects.SimpleObjectDispenser.dispense(SimpleObjectDispenser.java:25)
at org.testng.internal.objects.GuiceBasedObjectDispenser.dispense(GuiceBasedObjectDispenser.java:30)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:112)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:165)
at org.testng.TestClass.getInstances(TestClass.java:122)
at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:102)
at org.testng.TestClass.init(TestClass.java:94)
at org.testng.TestClass.<init>(TestClass.java:59)
at org.testng.TestRunner.initMethods(TestRunner.java:463)
at org.testng.TestRunner.init(TestRunner.java:339)
at org.testng.TestRunner.init(TestRunner.java:292)
at org.testng.TestRunner.<init>(TestRunner.java:183)
at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:596)
at org.testng.SuiteRunner.init(SuiteRunner.java:173)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:107)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1300)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1276)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1125)
at org.testng.TestNG.runSuites(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1031)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
或
java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter; at org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:62) at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:197)
您需要为 TestsPage
定义默认构造函数。 (不只是针对基础 class)
TestNG 尝试通过以下方法创建测试 class 的对象:
循环所有构造函数:
- 检查是否使用
@Parameters
定义了任何构造函数
- 检查是否有任何用
@Factory
注释的构造函数。
如果没有这样的构造函数则:
- 最后它会检查是否使用默认构造函数创建测试 class。
所以目前您的代码不符合上述三个标准。因此例外。
尝试添加默认构造函数,它会起作用。
public TestsPage() {
}
问题: 我是 selenium 和自动化测试的初学者,我正在使用 java、TestNG 和 maven 编写 selenium 脚本。当我将所有内容都写在一个 class 中时,一切正常,但我想要一个包含所有对象的包,一个用于测试的包,以及具有主要设置的 Base Class。该项目将为网站的每个页面包含一个 class,并为所有测试包含一个 class。 当我尝试修改某些内容时,另一个错误来自 BaseClass 中的构造函数,我不知道为什么 基础class是这样的:
我试过的
public BaseClass(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
或 PagegeFactory.initElements(new AjaxElementLocatorFactory(driver, TimeoutValue), this);
并没有奏效。
package com.selenium.Base;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.*;
import page_objects.AnalizesiPreturi;
import java.util.concurrent.TimeUnit;
public class BaseClass {
public WebDriver driver;
protected static AnalizesiPreturi baseClass;
public BaseClass(WebDriver driver) { }
public BaseClass() { }
@BeforeMethod
public void setUp() {
System.setProperty("webdriver.driver.chrome", "C://SeleniumWebdrivers//chromedriver.exe");
driver = new ChromeDriver();
//implicit wait
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.MINUTES);
//launch URL
driver.get("http://googl.com/");
//scroll
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,500)", "");
//WebDriverWailt for all objects located by class name
WebDriverWait wbd = new WebDriverWait(driver, 1000);
wbd.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className("AnalizesiPreturi")));
}
@AfterMethod
public void tearDown(){
driver.close();
}
}
页面对象class这是来自另一个包
package page_objects;
import com.gargoylesoftware.htmlunit.Page;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import com.selenium.Base.BaseClass;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
public class AnalizesiPreturi extends BaseClass {
public AnalizesiPreturi(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
@FindBy(css = "#onetrust-accept-btn-handler")
WebElement cookie;
@FindBy(css = "#footable_501 > tbody > tr.ninja_table_row_0.nt_row_id_77 > td.ninja_column_1.ninja_clmn_nm_pret.footable-last-visible")
WebElement plus1Button;
@FindBy(css = "#footable_501 > tbody > tr.ninja_table_row_1.nt_row_id_78 > td.ninja_column_1.ninja_clmn_nm_pret.footable-last-visible")
WebElement plus2Button;
@FindBy(css = "#calculator > div.body > div.products > div.innerProducts > div > div.right")
WebElement minusButton;
@FindBy(css = "#show-hide > div.hide")
WebElement closeButton;
@FindBy(css = "#footable_501 > thead > tr.footable-filtering > th > form > div > div > input")
WebElement search;
@FindBy(css = "#footable_501 > thead > tr.footable-filtering > th > form > div > div > div > button.btn.btn-primary")
WebElement findButton;
@Test
public AnalizesiPreturi addAnalises(){
PageFactory.initElements(driver, this);
cookie.click();
plus1Button.click();
plus2Button.click();
closeButton.click();
return null;
}
}
最后一个是测试包
package Test;
import com.selenium.Base.BaseClass;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
import page_objects.AnalizesiPreturi;
import page_objects.Centers;
public class TestsPage extends BaseClass {
public TestsPage(WebDriver driver) {
super(driver);
}
public WebDriver getDriverInstance() {
return driver;
}
@Test
public void TestAnalises()throws Exception{
//Tests
driver.get("");
AnalizesiPreturi analise = new AnalizesiPreturi(driver);
analise.addAnalises();
}
public void TestCenters(){
Centers centre = new Centers(driver);
centre.checkCenters();
}
}
下面是收到的异常:
org.testng.TestNGException:
An error occurred while instantiating class Test.TestsPage. Check to make sure it can be instantiated
at org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:134)
at org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79)
at org.testng.internal.objects.SimpleObjectDispenser.dispense(SimpleObjectDispenser.java:25)
at org.testng.internal.objects.GuiceBasedObjectDispenser.dispense(GuiceBasedObjectDispenser.java:30)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:112)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:165)
at org.testng.TestClass.getInstances(TestClass.java:122)
at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:102)
at org.testng.TestClass.init(TestClass.java:94)
at org.testng.TestClass.<init>(TestClass.java:59)
at org.testng.TestRunner.initMethods(TestRunner.java:463)
at org.testng.TestRunner.init(TestRunner.java:339)
at org.testng.TestRunner.init(TestRunner.java:292)
at org.testng.TestRunner.<init>(TestRunner.java:183)
at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:596)
at org.testng.SuiteRunner.init(SuiteRunner.java:173)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:107)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1300)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1276)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1125)
at org.testng.TestNG.runSuites(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1031)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
或
java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter; at org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:62) at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:197)
您需要为 TestsPage
定义默认构造函数。 (不只是针对基础 class)
TestNG 尝试通过以下方法创建测试 class 的对象:
循环所有构造函数:
- 检查是否使用
@Parameters
定义了任何构造函数
- 检查是否有任何用
@Factory
注释的构造函数。
如果没有这样的构造函数则:
- 最后它会检查是否使用默认构造函数创建测试 class。
所以目前您的代码不符合上述三个标准。因此例外。
尝试添加默认构造函数,它会起作用。
public TestsPage() {
}