有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案