当前位置: 首页 > 知识库问答 >
问题:

cucumberJVM:并行执行不完全并行

鞠乐
2023-03-14

我编写了两个功能文件,每个功能文件打开不同的浏览器URL,例如一个是open google。com和secnd一个开放的亚马逊。但事实并非如此。

两个浏览器都打开了谷歌。通用域名格式。此外,它不能与浏览器交互,任何编码到浏览器的操作都不会执行。此外,关闭第一个浏览器会导致第二个浏览器出现空指针异常。

cucumber版本6我从AbstractCucumberTesNG继承开始。然后我创建登录。功能并遵循Add Products。特征。

预期的行为应该是一个浏览器打开phptravels。net网站和另一个浏览器打开http://sellerceter.lazada.my.

我目前的情况并非如此,它使用phptravels打开两个浏览器。net,关闭一个浏览器后,它将打开卖家。拉扎达网站。

public class AddProduct {

    private WebDriverWait timeWait;
    private AddProductPageObject page;
    private ChromeDriver driver;
    private Logger log = LogManager.getLogger(AddProduct.class);
    // ======================================================================
    public AddProduct() {
    }

    @Given("navigate to manage product")
    public void navigateToManageProduct() {
        log.info("Start Login");
        try {

            WebDriverManager.chromedriver().setup();
            driver =  new ChromeDriver();
            this.timeWait = new WebDriverWait(driver, 30);
            page = PageFactory.initElements(driver, AddProductPageObject.class);
            driver.navigate().to("https://sellercenter.lazada.com.my/apps/seller/login");
            timeWait.until(ExpectedConditions.visibilityOfElementLocated(page.getLazadaSellerLogo()));

            // Input username
            driver.findElement(page.getUsername()).click();
            driver.findElement(page.getUsername()).clear();
            driver.findElement(page.getUsername()).sendKeys("nicholaswkc34@gmail.com");

            // Input password
            driver.findElement(page.getPassword()).click();
            driver.findElement(page.getPassword()).clear();
            driver.findElement(page.getPassword()).sendKeys("wlx_+279295");

            // Click submit btn
            driver.findElement(page.getSignInButton()).click();

            //assertThat(page.getPageTitle())

            Wait wait = new Wait();
            wait.implicitWait(driver, 5);

        } catch (Exception e) {
            log.error(e);
        }
    }
}

公共类登录{

private WebDriverWait timeWait;
private LoginPageObject page;
private ChromeDriver driver;
private Logger log = LogManager.getLogger(Login_FE.class);
// ======================================================================
public Login_FE() {
}

@Given("Launch the homepage and login")
public void launchTheHomepageAndLogin() {
    log.info("Start Login");
    try {

        WebDriverManager.chromedriver().setup();
        driver =  new ChromeDriver();
        timeWait = new WebDriverWait(driver, 30);
        // Instantiate LoginPageObject
        page = PageFactory.initElements(driver, LoginPageObject.class);
        log.info("Navigate to phptravels homepage");
        driver.navigate().to("https://www.phptravels.net/admin");
        timeWait.until(ExpectedConditions.visibilityOfElementLocated(page.getPhpLogo()));

        Actions inputAct = new Actions(driver);
        inputAct.sendKeys("admin@phptravels.com").perform();
        driver.findElement(page.getUsername()).sendKeys("admin@phptravels.com");


        Wait wait = new Wait();
        wait.implicitWait(driver, 3);



    }catch(Exception e) {
        log.error(e);
    }



    log.info("Login Successfully");
}

}

共有1个答案

万英武
2023-03-14

我使用相同的概念来测试移动应用程序。因此,为了打开两个浏览器并与它们单独交互,您必须存储驱动程序,同时在线程本地启动,如下所示:

private static ThreadLocal<AppiumDriver<MobileElement>> appiumDriver = new ThreadLocal<>();
 类似资料:
  • 我有3种方法需要并行运行,因为它们彼此独立,并在最后合并每种方法的结果,并将其作为响应发送。我还需要处理异常。 在不同的帖子中,我找到了下面的代码并进行了相应的修改。 上述各项是否应正确并行运行?我知道这需要更多的时间,我想确保我做对了。

  • 1.3 新版功能. 默认情况下,Fabric 会默认 顺序 执行所有任务(详细信息参见 Execution strategy ),这篇文档将介绍 Fabric 如何在多个主机上 并行 执行任务,包括 Fabric 参数设置、任务独立的装饰器,以及命令行全局控制。 它是如何运转的 由于 Fabric 1.x 并不是完全线程安全(以及为了更加通用,任务函数之间并不会产生交互),该功能的实现是基于 Py

  • 我有一个viewmodel,它对API执行不同的请求,我现在是这样调用我的API的 这种方法的问题是,我需要等待每一个完成来启动另一个,在我对repo(都是挂起函数)执行此调用后,我通知livedata,但这需要一些时间(4-5秒),并且我希望同时执行所有调用,并在通知我的livedata之前一次捕获它们 我在找像这样的东西 我希望使用Async-Await而不是作业

  • 我有4个@Test方法,希望每个方法都运行3次。我想在12个线程中同时执行所有这些。 我创建了一个testng。像这样的xml文件 如果我设置并行="方法",TestNG在Test1的4个线程中执行4个测试方法,之后对Test2执行相同的操作,然后对Test3执行相同的操作。但是我不想在运行Test2之前等待Test1完成。TestNG能够运行Test1、Test2 有没有办法告诉TestNG不要

  • 以我的经验,一提到并发执行,90%的人都会提到线程,的确这玩意用的很广泛,综合来说各方面都还可以。虽然很多语言都内置了线程库,C++11也有了,但严格来说线程是跟操作系统相关,具体说,如果操作系统支持线程,则语言的线程库简单封装下就可以了,如果操作系统不支持(如一些unix系统),那就比较麻烦了,简单的可以去掉线程库,或接口返回异常,复杂的可能自己实现一个用户态的线程机制 一个语言实现中如果要用到

  • 我正在将并行执行引入我的testNG套件中。当我将“parallel”设置为“tests”时,两个浏览器打开,两个测试的第一个类同时开始--这是我所期望的。当我将其设置为“classes”时,我希望第一个测试中的两个类同时开始,但是只有一个浏览器打开,第一个类中的第一个方法执行,然后用第二个类中的第一个方法打开一个新的浏览器,依此类推。谁能告诉我我做错了什么? 下面是我的xml文件: