npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

selenium-pages

v2.0.3

Published

It's an extensible page based class library for selenium. TypeScript is supported.

Downloads

38

Readme

selenium-pages

npm NPM npms.io (quality) Libraries.io dependency status for latest release Maintenance depends on selenium-webdriver

selenium-pages is a package for you who want to use selenium and manage some pages with your own classes simply.

Let's just get started and learn little by little, if needed.

Installation

npm install selenium-pages

for TypeScript, below line may be good too

npm install -D @types/selenium-webdriver

Prerequisites

Web drivers are installed and the paths for the drivers are ready.

Usage

Basics

You can use Selen.Pages.Any class for getting started or lightly use.

import { Selen } from "selenium-pages";

const pageOptions: Selen.Options = {
  origin: "https://www.google.com", // origin
  homePath: "/" // path of page home
};

(async () => {
///

const driver = await Selen.build("chrome");

const page = new Selen.Pages.Any(driver, pageOptions);

await page.goHome();

console.log(await page.getCurrentUrl());

console.log(await page.getTitle());

await page.goTo("/search?q=test");

console.log(
  await page
    .querySelectorAll("div.g h3")
    .then(
      elements => Promise.all(elements.map(
        element => element.getText()
      ))
    )
);

await driver.quit();

///
})();

see https://selenium-pages.netlify.app/ for more.

How to extend the base class

You can extend Selen.Pages.Base class for your own use.

import { Selen } from "selenium-pages";

const pageOptions: Selen.Options = {
  origin: "https://www.google.com",
  homePath: "/"
};

(async () => {
///

// customized page class definition
class Test extends Selen.Pages.Base {
  async workSome(){
    await this.executeScript(`
      document.body.appendChild(document.createElement('div')).innerHTML = "test";
    `);
  }
}

const testPage = new Test(
  await Selen.build("chrome"),
  pageOptions
);

await testPage.goHome();

await testPage.workSome();

///
})();

How to use customized options

You can extend Selen.Options and use it in your class instance methods.

import { Selen } from "selenium-pages";

type CustomOptions = Selen.Options & {
  some: string;
  testUrl: string;
};

class Custom extends Selen.Pages.Base<CustomOptions> {
  public async workSome(){
    // your options can be accessed with this.options
    console.log(this.options.some);

    // WebDriver can be accessed with this.driver
    await this.driver.get(this.options.testUrl);
  }
}

const customPage = new Custom(driver, {
  origin: "https://...",
  homePath: "/",
  some: "thing",
  testUrl: "https://.."
});

How to use style dictionary

styleDictionary is ready for you to name the selector strings.

import { Selen } from "selenium-pages";

class Custom extends Selen.Pages.Base {
  protected initializeStyleDictionary(){
    super.initializeStyleDictionary();
    this.styleDictionary.merge({
      inputBox: "div form input[name='some']",
      button: "div form button[type='submit']"
    });
  }
}

(async () => {
///

const customPage = new Custom(driver, someOptions);
await customPage.querySelector("inputBox")
  .then(box => box.sendKeys("hello"));
await customPage.querySelector("button")
  .then(button => button.click());

///
})();

Key can be accessed from Selen.Pages.Base instance as this.Key

import { Selen } from "selenium-pages";

(async () => {
///
class MyPage extends Selen.Pages.Base {
  public async workSome(text: string){
    await this.querySelector("input[name='something']")
      .then(box => box.sendKeys(text, this.Key.ENTER));
  }
}
///
})();

How to bundle customized pages your own

You can extend Selen.Pages for your own classes to be bundled

import { Selen } from "selenium-pages";

// define your own classes
class Custom1 extends Selen.Pages.Base {
  public sayHello(){
    console.log("hi");
  }
}

class Custom2 extends Selen.Pages.Base {
  public sayBye(){
    console.log("bye");
  }
}

// bundle your classes
class MyPages extends Selen.Pages {
  public static Custom1 = Custom1;
  public static Custom2 = Custom2;
}

// then you can use page classes from MyPages
const customPage1 = new MyPages.Custom1(driver, options);
const customPage2 = new MyPages.Custom2(driver, options);

// and the classes defined in base class(Selen.Pages) can be accessed
const anyPage = new MyPages.Any(driver, options);

Utilities

building WebDriver

Selen.build() returns a Promise for WebDriver instance.

const driver = await Selen.build("chrome");

setting environment variable PATH

Selen.addPath() adds the string into PATH variable.

Selen.addPath("/path/to/driver");