Giter VIP home page Giter VIP logo

klassijs / klassi-js Goto Github PK

View Code? Open in Web Editor NEW
51.0 51.0 27.0 90.74 MB

A platform independent debuggable BDD Javascript testing framework. It's simple and easy to use. It's built with nodeJs, webdriver.io ((Next-gen WebDriver for Node.js) and cucumber-js.

License: MIT License

JavaScript 100.00%
automated-testing cucumberjs javascript-framework klassi klassi-js nodejs test-automation test-framework webdriverio

klassi-js's People

Contributors

carlosbermejop avatar larryg01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

klassi-js's Issues

Errors out at generating html report if not run in the project root

My directory structure is exactly like the default, except everything is under one parent e2e-tests. I can run tests successfully if I do node ./node_modules/webdriverio-cucumber-js/index.js -s ./e2e-tests/step-definitions -o ./e2e-tests/shared-objects -p ./e2e-tests/page-objects -r ./e2e-tests/reports (and move features up to the root).

What I would like to do is to have features inside e2e-tests and run the whole thing with node ../node_modules/webdriverio-cucumber-js/index.js. That fails like so:

D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\webdriverio-cucumber-js\node_modules\cucumber\lib\cucumber\runtime\event_broadcaster.js:30
            throw error;
            ^

Error: ..\node_modules\webdriverio-cucumber-js\runtime\world.js:171 ENOENT: no such file or directory, open 'D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\e2e-tests\package.json'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.fs.readFileSync (fs.js:508:33)
    at Object.readFileSync (D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\jsonfile\index.js:66:20)
    at generateReport (D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\webdriverio-cucumber-js\node_modules\cucumber-html-reporter\lib\reporter.js:14:32)
    at Object.generate (D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\webdriverio-cucumber-js\node_modules\cucumber-html-reporter\lib\reporter.js:235:9)
    at Object.generateReport [as generate] (D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\webdriverio-cucumber-js\node_modules\cucumber-html-reporter\index.js:30:21)
    at D:\Lalo\Projects\nowtilus\nemo-bridge\frontend\node_modules\webdriverio-cucumber-js\runtime\world.js:183:22
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

The root cause being that cucumber-html-reporter looks for my package.json in the cwd.

If I force-update cucumber-html-reporter to the latest version, running it the way I want just works. I didn't notice any other side-effects.

tl;dr: update cucumber-html-reporter dependency version. They're on 2.03 and what you have is 0.x. ๐Ÿ˜‰

Debugging

Hello. Im using the framework to demo a few testing ideas, and tried to follow the debugging steps by adding debugger; to my code but the test never gets in to the REPL. Is this still the recommended method to debug or should i use driver.debug() with mocha timeouts? Thanks

Handling of AJAX calls

Currently using that library for automation at my firm. I have a question related to handling the ajax calls? we are using v2.3.5 at the moment. Right now I'm making a wait call to see the element is visible or not and perfrom some function after that. The problem is that at local it's working fine but when I run over CI/CD pipeline. It fails. I created a function in helper.js and run a script "jQuery.active == 0". But it was not working as expected. Can you help me out here?

Browserstack command results in error

Hey,

I just cloned the repo, filled in the right username and key in the browserstack.json file and tried executing the duckDuckGo-feature with the command from the repo:

node run bslocal chrome/@search

It results in this error:

C:\Users\***\*****\klassi-js-master>node run bslocal chrome/@search
internal/modules/cjs/loader.js:583
throw err;
^

Error: Cannot find module "C:\Users\***\*****\klassi-js-master\run"
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3) 

Async Problem / Race Condition in Image Comparison

Hi,

thanks for this nice work. We found an issue when Image Comparison took too long in imageComparision.js.

This is our workaround:

     *
     * @param result
     * @returns {Promise<void>}
     */
    this.value = async function () {
      filename = await file_name;
      
      const resultPathNegative = `${resultDirNegative}${filename}`;
      const resultPathPositive = `${resultDirPositive}${filename}`;
      //await driver.pause(500);
      while(typeof result == 'undefined')
        continue;

But maybe you can come up with a nice solution.

Hangs on exit

Hello! Thanks so much for the handy package - it's the only way I've managed to get Cucumber to work with webdriver.io, after trying out all the boiler plate projects etc.

Just having a little issue here though - I'm just running the example Duck Duck Go scripts, and they all run well, and complete and the report is produced. The problem is after this it just hangs and then eventually quits with a timeout.

It's running on a pretty much barebones package.json, Windows 10 64bit, node v8.10.0, Chrome 65.

Was also wondering - what's the best way to prevent it trying to email out the report?

> [email protected] runtests C:\Users\Computer\a_ap\a_ap-ui-test-suite
> node ./node_modules/webdriverio-cucumber-js/index.js

@search @wip
Feature: Searching for apps with duckduckgo

    As an internet user
    In order to find out more about certain user apps
    I want to be able to search for information about the required apps

  @search @wip
  Scenario: User inputs some search data
{"message":"The errorLog File has NOT been created: Error: ENOENT: no such file or directory, open 'C:\\Users\\Computer\\a_ap\\a_ap-ui-test-suite\\log\\errorLog\\KlassiTechAutomatedTestReport-13-04-2018-11:15:24.json'","level":"error"}
{"message":"The infoLog File has NOT been created: Error: ENOENT: no such file or directory, open 'C:\\Users\\Computer\\a_ap\\a_ap-ui-test-suite\\log\\infoLog\\KlassiTechAutomatedTestReport-13-04-2018-11:15:24.json'","level":"error"}
  โˆš Given The user arrives on the duckduckgo search page
{"message":"this is checking whats being returned:- DuckDuckGo โ€” Privacy, simplified.","level":"info"}
{"message":"Search function completed","level":"info"}
  โˆš When they input space 1999
{ sessionId: '85981c0cbffbd0b930c4ece123ed26ee',
  status: 0,
  value:
   { ELEMENT: '0.550723880856145-1',
     'element-6066-11e4-a52e-4f735466cecf': '0.550723880856145-1' },
  selector: 'div#links' }
finished this bit
  โˆš Then they should see some results

  @search @wip
  Scenario: User inputs some search data
{"message":"The infoLog File has NOT been created: Error: ENOENT: no such file or directory, open 'C:\\Users\\Computer\\a_ap\\a_ap-ui-test-suite\\log\\infoLog\\KlassiTechAutomatedTestReport-13-04-2018-11:15:29.json'","level":"error"}
{"message":"The errorLog File has NOT been created: Error: ENOENT: no such file or directory, open 'C:\\Users\\Computer\\a_ap\\a_ap-ui-test-suite\\log\\errorLog\\KlassiTechAutomatedTestReport-13-04-2018-11:15:29.json'","level":"error"}
  โˆš Given The user arrives on the duckduckgo search page
{"message":"this is checking whats being returned:- DuckDuckGo โ€” Privacy, simplified.","level":"info"}
{"message":"Search function completed","level":"info"}
  โˆš When they input angry birds
{ sessionId: 'b23681a13af34aaf89387b6dc0e36309',
  status: 0,
  value:
   { ELEMENT: '0.6262359681794236-1',
     'element-6066-11e4-a52e-4f735466cecf': '0.6262359681794236-1' },
  selector: 'div#links' }
finished this bit
  โˆš Then they should see some results

2 scenarios (2 passed)
6 steps (6 passed)
0m04.594s
Cucumber HTML report C:\Users\Computer\a_ap\a_ap-ui-test-suite\reports\KlassiTech Automated Test Report-13-04-2018.html generated successfully.

C:\Users\Computer\a_ap\a_ap-ui-test-suite\node_modules\cucumber\lib\cucumber\runtime\event_broadcaster.js:30
            process.nextTick(function(){ throw error; }); // prevent swallow by unhandled rejection
                                         ^
node_modules\webdriverio-cucumber-js\runtime\world.js:248 function timed out after 60000 milliseconds
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] runtests: `node ./node_modules/webdriverio-cucumber-js/index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] runtests script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Computer\AppData\Roaming\npm-cache\_logs\2018-04-13T10_16_34_229Z-debug.log


Log file:


0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'runtests' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'preruntests', 'runtests', 'postruntests' ]
5 info lifecycle [email protected]~preruntests: [email protected]
6 info lifecycle [email protected]~runtests: [email protected]
7 verbose lifecycle [email protected]~runtests: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~runtests: PATH: C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\Computer\a_ap\a_ap-ui-test-suite\node_modules\.bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Program Files (x86)\Bitvise SSH Client;C:\Users\Computer\AppData\Local\Microsoft\WindowsApps;C:\Users\Computer\AppData\Local\atom\bin;C:\Users\Computer\AppData\Roaming\npm;C:\Program Files\Microsoft VS Code\bin
9 verbose lifecycle [email protected]~runtests: CWD: C:\Users\Computer\a_ap\a_ap-ui-test-suite
10 silly lifecycle [email protected]~runtests: Args: [ '/d /s /c',
10 silly lifecycle   'node ./node_modules/webdriverio-cucumber-js/index.js' ]
11 silly lifecycle [email protected]~runtests: Returned: code: 1  signal: null
12 info lifecycle [email protected]~runtests: Failed to exec runtests script
13 verbose stack Error: [email protected] runtests: `node ./node_modules/webdriverio-cucumber-js/index.js -b firefox`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\index.js:285:16)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at EventEmitter.emit (events.js:214:7)
13 verbose stack     at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at ChildProcess.emit (events.js:214:7)
13 verbose stack     at maybeClose (internal/child_process.js:925:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid [email protected]
15 verbose cwd C:\Users\Computer\a_ap\a_ap-ui-test-suite
16 verbose Windows_NT 10.0.16299
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "runtests"
18 verbose node v8.10.0
19 verbose npm  v5.6.0
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] runtests: `node ./node_modules/webdriverio-cucumber-js/index.js -b firefox`
22 error Exit status 1
23 error Failed at the [email protected] runtests script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

run klassi

hello,

i just start leaning Webdriverio and found this complete library wonderful .
i had clone repo and run npm install , iwould like to run api test so i process with npm test or node index.js --tags @api but the two commands fails any how to use blog?

Setting fixed resolution for local tests

Hey,

before the update I was able to set a fixed resolution in the chromeDriver.js like this:

driver.then(function () {
    /**
     * sets the browser window size to maximum or a particular size
     */
    // driver.windowHandleMaximize();
    driver.windowHandleSize({width: 1920, height: 1080});
  });

This function is now missing. I tried setting the resolution in the capabilities part, but was not able to do so.

Browserstack

Unable to connect to browserstack
@search Scenario Outline: User inputs some search data โœ– failed Error: connect ECONNREFUSED 207.254.8.2:4444 at new RuntimeError (/Users/rhowk1271/Sites/time/testing/ent-testing2/node_modules/webdriverio/build/lib/utils/ErrorHandler.js:143:12) at Request._callback (/Users/rhowk1271/Sites/time/testing/ent-testing2/node_modules/webdriverio/build/lib/utils/RequestHandler.js:330:43) at self.callback (/Users/rhowk1271/Sites/time/testing/ent-testing2/node_modules/request/request.js:185:22)
I've tested the username and key on https://github.com/browserstack/cucumber-js-browserstack and it makes the connection successfully so I think I've got that bit right.
node index.js -d -t @search -w browserstack -x win10-chrome
is the command I am using, sussed out that I needed to include -x win10-chrome
node index.js -d -t @search
works ok except for some GraphicsMagick/ImageMagick: errors which I don't care about right now. Basically just trying to connect to browserstack and wondering if the api is out of date, or when was the last time you were successful in making a connection to Browser stack? Doing a deeper dive at https://www.browserstack.com/javascript-testing-api but would appreciate any guidance you could give me. Awesome package by the by.

ReferenceError: log is not defined

I cloned your repo and ran the default test. Without doing anything I had the following error:

    at /mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:216:5
    at new Promise (<anonymous>)
    at Object.<anonymous> (/mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:200:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
(node:1394) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1394) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```

I managed to change to this error to the one reported in #14 after npm i log and add these two lines in index.js:

const Log = require('log'),
      log = new Log('info');

exclude tags

Is there a way to exclude certain tags? This could be a useful feature.

Using data-attributes as selectors

I have added data-attributes to test-relevant elements and want to use them as selectors in my shared-objects. So I can work with them in my page-objects.
I tried following this blogpost: https://blog.kentcdodds.com/making-your-ui-tests-resilient-to-change-d37a6ee37269

My shared-object currently looks like this:

elem: {
        usernameInput: 'rootNode.querySelector("[data-testid="username"]")',
        passwordInput: 'rootNode.querySelector("[data-testid="password"]")'
}

And I try using them in my page-object this way:

let selector1 = shared.loginData.elem.usernameInput;
await driver.click(selector1).keys(username);
let selector2 = shared.loginData.elem.passwordInput;
await driver.click(selector2).keys(password);

I am getting this error:

C:\Users\***\******\klassi-js-master>node index.js -d -t @Login
@Login
Feature: Logging in

  @Login
  Scenario Outline: User inputs the username and password
    Given The user arrives on the homepage
    When they put in ********* and ********* and click the login-button
{"message":"\tScreenshot saved to: ./artifacts/visual-regression/new-screens/chrome/positive/*********_1-0.png","level":"info"}
    ร— failed
      invalid selector: An invalid or illegal selector was specified
      Error: Argument was an invalid selector (e.g. XPath/CSS).
          at element("rootNode.querySelector("[data-testid="username"]")") - C:\Users\***\******\klassi-js-master\node_modules\webdriverio\build\lib\commands\click.js:12:17
          at keys("*********") - C:\Users\***\******\klassi-js-master\page-objects\Login.js:18:39
    Then they should see their dashboard
    - skipped

Any idea on how to access the data-attributes properly?

How to run test on Selenium Grid.

Hi @larryg01 ,
I have setup Docker Selenium Grid, I can see from index page that remote driver details can be passed for browserstack as โ€œ-w, --remoteService [optional]โ€

Please can you advice what will be the best way to pass the grid URL as options.

Thanks

running on selenium grid

@larryg01 sorry to bother you but if you can tell me how to run this on selenium grid, it will be of great help.I have setup hub on machine now getting current error.

Unable to create new service: ChromeDriverService
       Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:32:19.891Z'
       System info: host: 'shaibals-MacBook-Pro.local', ip: 'fd5c:339:88a3:b100:c9f3:beab:39fe:d667', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '1.8.0_131'
       Driver info: driver.version: unknown

helper-function "getElementText" not working anymore

I just updated to the newest version of the klassi-js repo and therefore to the newest version of webdriverio. Now the "getElementText" function does not work anymore and throws this error:

Then a pupil should see the dashboard
    ร— failed
      TypeError: driver.waitForExist is not a function
          at Object.getElementText (C:\Users\Job\Desktop\integration-tests\runtime\helpers.js:298:19)

I tried fixing the function but I could not find the solution. The changelog of webdriverio does not mention the waitForExist function being renamed or deleted.

Cannot resolve ./runtime/envConfig

If I run

node ./node_modules/klassi-js/index.js -s [path to my step definitions]

I get:

    throw err;
    ^

Error: Cannot find module './runtime/envConfig'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/wolas/sensotransel/sensotransel-vision/node_modules/klassi-js/index.js:51:17)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3```

By the way - why klassi-js is not registered as an executable as any other npm package so I can use it as:

`klassi-js -s [path]` in my npm package.json scripts ? 

Update WebdriverIO to v5

Currently the WebdriverIO version is pinned to ^4.12.0. I highly recommend to update to v5. It is pretty stable and sees growing adaption. It comes with a ton of bug fixes and improvements compared to v4.

Browser window opening 2x when running a test

I cloned your library for evaluation and found this problem:

When I start the test node index.js -d -t @search the browser window opens twice and the selenium just uses the second one.

I found out this is due to having 2 hooks (one Before and another BeforeAll) calling getDriverInstance() and the Before is not checking if it is already instantiated.

Deprecation warning and error message when running tests

When I run the example tests I get the following errors on screen:

Got this error in two machines:

  • Linux Ubuntu 16.04 (from within Windows 10) x64 with NodeJS v8.11.2
  • Mac OS X High Sierra with NodeJS v8.11.2
[Fri Jul 06 2018 21:42:45 GMT+0000 (UTC)] ERROR cucumber integration has failed code is not defined
(node:1295) UnhandledPromiseRejectionWarning: ReferenceError: code is not defined
    at exitNow (/mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:205:22)
    at /mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:208:9
    at new Promise (<anonymous>)
    at Object.<anonymous> (/mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:200:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
(node:1295) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1295) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:1295) UnhandledPromiseRejectionWarning: ReferenceError: code is not defined
    at exitNow (/mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:205:22)
    at /mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:208:9
    at new Promise (<anonymous>)
    at Object.<anonymous> (/mnt/c/Users/braza/Code/klassi-cucumber-js/index.js:200:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
(node:1295) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)

how to run parallel test

i tried

desiredCapabilities: {
browserName: 'chrome',
maxSessions: 2,
javascriptEnabled: true,
acceptSslCerts: true,
shardTestFiles: true,
browserConnectionEnabled : true,
chromeOptions: {
// args: ['--headless',
// ],
},

but it does not started multiple sessions of chrome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.