java如何修改初始化方法是Selenium页面对象模型基类来调用Selenium网格中心和节点?
我正在学习Selenium Grid,可以通过启动Sel Grid Hub并连接到节点来运行程序。然而,我之前使用Java和TestNG创建了一个Selenium POM体系结构,在尝试将基本的Selenium网格代码包含到现有的WebDriver初始化方法中时,我遇到了许多异常。我收到的少数例外是WebDriver会话为null,有时它会执行第一个TestNG方法,然后关闭执行,即使存在其他方法
下面是我的基类(TestBase.java)
package com.crm.qa.base;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
//import org.apache.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import com.crm.qa.util.TestUtil;
//import com.crm.qa.util.WebEventListener;
import com.crm.qa.util.WebEventListener;
public class TestBase {
public static WebDriver driver;
public static Properties prop;
//public static EventFiringWebDriver e_driver;
//public static WebEventListener eventListener;
public static ThreadLocal<WebDriver> tdriver = new ThreadLocal<WebDriver>();
public TestBase(){
try {
prop = new Properties();
FileInputStream ip = new FileInputStream(System.getProperty("user.dir")+ "/src/main/java/com/crm"
+ "/qa/config/config.properties");
prop.load(ip);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static synchronized WebDriver getDriver() {
return tdriver.get();
}
public static WebDriver initialization(){
String browserName = prop.getProperty("browser");
String chromepath = prop.getProperty("chrome_driver_path");
String path = System.getProperty("user.dir");
if(browserName.equals("chrome")){
System.setProperty("webdriver.chrome.driver", path+chromepath);
driver = new ChromeDriver();
}
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
driver.get(prop.getProperty("url"));
tdriver.set(driver);
return getDriver();
下面是我的测试类(LoginPageTest.java)
package com.crm.qa.testcases;
import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import com.crm.qa.AllureReportListener.AllureReportListener;
import com.crm.qa.base.TestBase;
import com.crm.qa.pages.HomePage;
import com.crm.qa.pages.LoginPage;
import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;
//@Listeners(AllureReportListener.class)
public class LoginPageTest extends TestBase{
Logger log = Logger.getLogger(LoginPageTest.class);
LoginPage loginPage;
HomePage homePage;
public LoginPageTest() {
super();
}
@BeforeMethod
public void setup() throws MalformedURLException {
log.info("******************************Starting test case execution************************");
initialization();
loginPage = new LoginPage();
}
@Test(priority=1, description="Verifying Login Page Title Test") //description from testng
@Severity(SeverityLevel.NORMAL)
@Description("Test Case Description: Verify Login Page Title") //description from allure reports
public void loginPageTitleTest() {
log.info("****************************** starting test case *****************************************");
log.info("****************************** loginPageTitleTest *****************************************");
String title = loginPage.validateLoginPageTitle();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
Assert.assertEquals(title, "Your store. Login");
System.out.println(title);
}
@Test(priority=2)
public void AdminAreaLogoTest() {
log.info("****************************** starting test case *****************************************");
log.info("****************************** AdminAreaLogoTest *****************************************");
String logo = loginPage.validateAdminAreaLogo();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
Assert.assertEquals(logo, "Admin area demo");
System.out.println(logo);
}
@Test(priority=3)
public void loginTest() {
log.info("****************************** starting test case *****************************************");
log.info("****************************** loginTest *****************************************");
homePage = loginPage.login(prop.getProperty("username"), prop.getProperty("password"));
}
@AfterMethod
public void tearDown() {
driver.quit();
log.info("****************************** Browser is Closed *****************************************");
}
}
我的登录页面类
package com.crm.qa.pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import com.crm.qa.base.TestBase;
import io.qameta.allure.Step;
public class LoginPage extends TestBase{
//Page Factory - Object Repository
@FindBy(name="Email")
WebElement email;
@FindBy(name="Password")
WebElement password;
@FindBy(xpath="//input[@class='button-1 login-button']")
WebElement loginBtn;
@FindBy(xpath="//h1//ancestor::div[@class='page-title']")
WebElement adminlogo;
//Initializing Page Objects
public LoginPage()
{
PageFactory.initElements(driver, this);
}
//Actions:
@Step("getting login page title method")
public String validateLoginPageTitle()
{
return driver.getTitle();
}
public String validateAdminAreaLogo() {
return adminlogo.getText();
}
@Step("login with username: {0} and password: {1 }") //{0} will enter username in Allure Reports and {1} will enter password
public HomePage login(String em, String pwd) {
email.clear();
email.sendKeys(em);
password.clear();
password.sendKeys(pwd);
loginBtn.click();
return new HomePage();
}
}
下面是一个基本的Selenium网格程序的代码。。。我需要修改POM TestBase类中的初始化方法,以包括DesiredCap、ChromeOptions、huburl等,并在GridHub节点上成功执行它。请帮忙
色度测试。爪哇
package GridTests;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
public class ChromeGridTests {
public static void main(String[] args) throws MalformedURLException, InterruptedException {
// 1. Define Desired Capabilities
DesiredCapabilities cap = new DesiredCapabilities();
cap.setBrowserName("chrome");
cap.setPlatform(Platform.WIN10);
//2. Chrome Options definition:
ChromeOptions options = new ChromeOptions();
options.merge(cap); // Merge DesiredCapapbilities into ChromeOptions
String huburl = "http://192.168.1.8:4444/wd/hub";
WebDriver driver = new RemoteWebDriver(new URL(huburl), options);
driver.manage().window().maximize();
driver.get("https://admin-demo.nopcommerce.com/login?ReturnUrl=%2Fadmin%2F");
System.out.println(driver.getTitle());
Thread.sleep(5000);
driver.close();
}
}
任何帮助都会很好。谢谢
共 (0) 个答案