我有一个java类,它打开两个Chrome浏览器,分别搜索“测试1”和“测试2”。然而,一旦两个浏览器都打开,只有一个带有谷歌页面的浏览器会搜索“测试1测试2”。
我相信这个问题可能是因为我从父类调用驱动程序 = 新的 WebDriver。但是,我不确定如何解决此问题。
下面是我尝试并行运行的两个方法。
package webDrivertests;
public class googleTestClass extends Methods{
@Test
public void test1() throws InterruptedException {
googleTestClass object1;
object1 = new googleTestClass();
object1.launchBrowser();
object1.goToURL("https://www.google.com");
object1.enterValue("name","q","google test 1");
driver.quit();
}
@Test
public void test2() throws InterruptedException {
googleTestClass object2;
object2 = new googleTestClass();
object2.launchBrowser();
object2.goToURL("https://www.google.com");
object2.enterValue("name","q","google test 2");
driver.quit();
}
}
这是我用来调用它们的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="2" name="Test" parallel="methods">
<classes>
<class name="webDrivertests.googleTestClass"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
包含驱动程序的父方法
package webDrivertests;
// import statements
public class Methods {
public static 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);
}
}
当前结果:打开两个浏览器,每个浏览器都指向google.com。然而,只有一个浏览器会搜索“测试1测试2”。感谢任何帮助!如果可能的话,我仍然希望使用我的父类“Methods ”,因为它包含了很多我在其他真实测试用例中使用的方法。
先谢谢你。
由于类中驱动程序对象的< code>static声明,当第二次测试调用launchBrowser()时,它会覆盖并行执行。
显然,移除< code>static将会修复这个问题,但是随着测试平台和方法的增加,您仍然会遇到管理驱动程序的不同问题。
我建议使用任何满足此类要求的TestNG扩展。我们正在使用QAF,它建立在TestNG之上,提供驱动程序管理、资源管理和更多对Web/移动/Web服务测试至关重要的功能。
问题出在您的测试代码中。WebDriver 对象被声明为静态对象。
因此,这会导致每个测试方法共享相同的实例。
要解决此问题,请从方法
类中的WebDRiver声明中删除静态
关键字,然后重试。
问题内容: 我想同时运行多个Selenium测试(在Jenkins服务器上)。 当前,由于ChromeDriver似乎通过特殊端口进行通讯,因此一次仅运行一次测试。因此,以某种方式,我想我必须通过Selenium将某种端口设置传递给ChromeDriver,以启动多个测试。 不幸的是,Selenium网站上的该主题为空:http : //docs.seleniumhq.org/docs/04_we
当我试图在Selenium Grid 2旁边使用TestNG并行运行测试时,我似乎遇到了一个问题。 尽管打开的浏览器数量与我正在运行的测试数量相匹配,但所有测试的所有指令都被发送到同一个浏览器窗口。例如,每个测试都会打开一个页面并尝试登录。四个浏览器窗口将打开,但一个浏览器窗口将导航到登录页面四次,然后键入用户名四次,而其余的浏览器窗口保持不活动。 以下是我如何启动网格: xml套件是这样设置的:
问题 我有一堆jUnit测试(许多具有自定义运行器,例如PowerMockRunner或JUnitParamsRunner)都在一些根包下(它们在的不同深度的不同子包中)。 我想收集包<code>tests<code>下的所有测试,并在不同的JVM中并行运行每个测试类。理想情况下,并行化是可配置的,但默认的number_of_cores也完全可以。请注意,我不想在自己的JVM中运行每个方法,而是要
我有一个主要的“抽象”类宠物,和两个“真实”类狗和猫。当我有两个宠物的例子时,我想知道它们是否是“同一种宠物”,而不考虑它们是哪种宠物。 我试过这个 我尝试了所有评论的返回,它总是给出这样的结果: 有没有办法在主类中进行这样的测试以避免代码重复? 编辑: 多人提到它忘记了子类化部分 这可以按预期工作
我的自动化测试有一些问题。我的EclipseIDE中大约有50个测试用例。所有测试用例都在不同的类中。另外,我还有一个基类,它包含@beforeclass和@afterclass。在@beforeclass中,浏览器打开,URL打开,网站URL打开,然后执行登录过程。然后我的测试用例工作。它们都以@Test注释开始。我使用TestNG套件将它们连接起来。基类:我的基类。java类MyBaseCla
我的Java包中有四个类。只有一个类具有方法。 当我运行方法时,我如何运行这四个类中的所有方法? 以下是我的课程: 第一类。JAVA 第二类。爪哇 第三类。JAVA 样品。JAVA