我有一个Java类,可打开两个Chrome浏览器,分别搜索“ test 1”和“ test 2”。但是,一旦两个浏览器都打开,只有一个带有google页面的浏览器将搜索“ test 1 test 2”。
我相信这个问题可能是因为我从父类中调用driver = new WebDriver。但是,我不确定如何解决该问题。
这是我尝试并行运行的两种方法。
class wroom(Thread):
def run(self):
UDP_PORT_NO = 6789
UDP_IP = '192.168.2.255'
while 1:
try:
clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while 1:
time.sleep(2)
clientSock.sendto('test'), (UDP_IP, UDP_PORT_NO))
except:
pass
这是我用来调用它们的xml文件。
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 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 -->
当前结果:打开两个浏览器,每个浏览器都访问google.com。但是,只有一个浏览器将搜索“ test 1 test 2”。任何帮助表示赞赏!如果可能的话,我仍想使用父类“方法”,因为它包含许多用于其他实际测试用例的方法。
谢谢。
答案 0 :(得分:0)
问题出在您的测试代码上。 WebDriver对象被声明为静态对象。
因此,这将导致每个测试方法共享同一实例。
要解决此问题,请从man sched_getaffinity
类的WebDriver声明中删除static
关键字,然后重试。
答案 1 :(得分:0)
由于在类中对驱动程序对象进行了IF OBJECT_ID('TEMPDB..#TBLVehicles') IS NOT NULL
DROP TABLE #TBLVehicles;
CREATE TABLE #TBLVehicles
(
VehicleId INT
);
INSERT INTO #TBLVehicles
VALUES (100),(101),(102),(103),(104),(105);
IF OBJECT_ID('TEMPDB..#TBLTrips') IS NOT NULL
DROP TABLE #TBLTrips;
CREATE TABLE #TBLTrips
(
VehicleId INT
,StartDate DATE
,Odometer INT
);
INSERT INTO #TBLTrips
VALUES
(100,'2018-01-12',100 )
,(101,'2018-05-12',1000 )
,(101,'2018-05-12',1010 )
,(103,'2018-05-12',500 )
,(103,'2018-06-12',505 )
,(105,'2018-06-12',0 )
,(105,'2018-06-12',0 );
DECLARE @SQLString NVARCHAR(MAX)
DECLARE @DateArray VARCHAR(MAX)
DECLARE @StartDate DATE='2018-01-12'
DECLARE @EndDate DATE='2018-06-12'
IF OBJECT_ID('TEMPDB..#Dates') IS NOT NULL
DROP TABLE #Dates;
CREATE TABLE #Dates
(
Date DATE
);
WHILE @StartDate<=@EndDate
BEGIN
INSERT INTO #Dates
SELECT @StartDate
SET @StartDate = DATEADD(DAY,1,@StartDate)
END
SELECT @DateArray=ISNULL(@DateArray+',','')+'['+CAST(Date AS VARCHAR)+']' FROM #Dates ;
SET @SQLString=
'
WITH CTE AS
(
SELECT V.VehicleId
,T1.Date
,CASE WHEN T2.Odometer IS NULL THEN 0 ELSE 1 END OdometerKey
FROM #TBLVehicles V
LEFT JOIN FROM #Dates T1 ON 1=1
LEFT JOIN #TBLTrips T2 ON V.VehicleId = T2.VehicleId AND T1.Date=T2.StartDate
)
SELECT * FROM CTE
PIVOT
(SUM(OdometerKey) FOR Date IN ('+@DateArray+')
) PVT
';
EXEC SP_EXECUTESQL @SQLString
--PRINT(@SQLString)
声明,因此当第二个测试调用launchBrowser()时,它将被覆盖并行执行。
显然,删除static
可以解决此问题,但是随着测试床和方法的增加,您仍然会遇到管理驱动程序的其他问题。
我建议使用TestNG extension中满足此类要求的任何一个。我们正在使用QAF,它基于TestNG构建,并提供驱动程序管理,资源管理以及许多其他功能,这些功能对于Web /移动/ Web服务测试至关重要。