selenium_standalone_dsl 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +34 -8
- data/{demo.rb → examples/yahoo_searcher.rb} +1 -1
- data/lib/selenium_standalone_dsl/base.rb +10 -21
- data/lib/selenium_standalone_dsl/version.rb +2 -2
- data/lib/selenium_standalone_dsl.rb +1 -1
- data/selenium_standalone_dsl.gemspec +4 -4
- data/spec/base_spec.rb +60 -0
- data/spec/selenium_standalone_dsl_spec.rb +2 -59
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e5ca3a0d39428672502c8d0731e8732b129489bc
         | 
| 4 | 
            +
              data.tar.gz: 6d0dbb1640ca9c44e908d576d19c4333c186157c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a61ddd3963efa378873a5251bdaf75020ef3c3e5e3dd95963a947df25c6acdab595cdc903f57e1a87ccc84ab7ce6878eac7841cdc674eb2b723f4429b6c46379
         | 
| 7 | 
            +
              data.tar.gz: 2128b1811e1e2bf2fd1dff2f257bc7618756259a15072ff82e50d4582376d870c09dd847e3e424207e9538bad26afd4b7d4d3960a4fff81f235b786ff2fb561a
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,9 +1,14 @@ | |
| 1 1 | 
             
            [](https://badge.fury.io/rb/selenium_standalone_dsl)
         | 
| 2 | 
            +
            [](https://travis-ci.org/acro5piano/selenium_standalone_dsl)
         | 
| 2 3 |  | 
| 3 4 | 
             
            # Selenium Standalone DSL
         | 
| 4 5 |  | 
| 5 6 | 
             
            Gem for using Selenium webdriver simply.
         | 
| 6 7 |  | 
| 8 | 
            +
            Let's scrape sites using JavaScript and iframe!
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            This project aims to expanding Selenium and Nokogiri.
         | 
| 11 | 
            +
             | 
| 7 12 | 
             
            ## Installation
         | 
| 8 13 |  | 
| 9 14 | 
             
            Ensure you have already installed Firefox:
         | 
| @@ -39,7 +44,9 @@ gem install selenium_standalone_dsl | |
| 39 44 | 
             
            ## Usage
         | 
| 40 45 |  | 
| 41 46 | 
             
            ```rb
         | 
| 42 | 
            -
             | 
| 47 | 
            +
            require 'selenium_standalone_dsl'
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            class YahooSearcher < SeleniumStandaloneDSL::Base
         | 
| 43 50 | 
             
              def search_for_wikipedia
         | 
| 44 51 | 
             
                visit 'https://www.yahoo.com/'
         | 
| 45 52 | 
             
                fill_in 'p', with: 'wikipedia'
         | 
| @@ -70,6 +77,23 @@ driver.search_for_wikipedia | |
| 70 77 |  | 
| 71 78 | 
             
            ```
         | 
| 72 79 |  | 
| 80 | 
            +
             | 
| 81 | 
            +
            ## Supported API
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            | Method   | Summary                           | Arguments                | Remarks                        |
         | 
| 84 | 
            +
            |----------|-----------------------------------|--------------------------|--------------------------------|
         | 
| 85 | 
            +
            | click    | Click a button or link            | text of link, name, etc. |                                |
         | 
| 86 | 
            +
            | select   | Choose an option in select box    | option text              |                                |
         | 
| 87 | 
            +
            | visit    | Navigate firefox to a link        | link url                 |                                |
         | 
| 88 | 
            +
            | fill\_in | Fill in a input box               | element name             |                                |
         | 
| 89 | 
            +
            | search   | Search page source using Nokogiri |                          | Returns Nokogiri::XML::Element |
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            ### Options
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            | Name      | Arguments                                     | Defalut     |
         | 
| 94 | 
            +
            |-----------|-----------------------------------------------|-------------|
         | 
| 95 | 
            +
            | :find\_by | :link\_text, :name, :id, :class, :css, :xpath | :link\_text |
         | 
| 96 | 
            +
             | 
| 73 97 | 
             
            ## Development
         | 
| 74 98 |  | 
| 75 99 | 
             
            ```sh
         | 
| @@ -79,7 +103,7 @@ bundle install --path vendor/bundle | |
| 79 103 | 
             
            bundle exec rake install
         | 
| 80 104 | 
             
            bundle exec rake spec
         | 
| 81 105 | 
             
            ```
         | 
| 82 | 
            -
             | 
| 106 | 
            +
             | 
| 83 107 | 
             
            To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
         | 
| 84 108 |  | 
| 85 109 | 
             
            ## Roadmap
         | 
| @@ -94,7 +118,7 @@ In my heart, `Selenium Spider` will have these features: | |
| 94 118 |  | 
| 95 119 | 
             
            ### Full JavaScript support
         | 
| 96 120 |  | 
| 97 | 
            -
            Based on Selenium Standalone DSL, it comprehences JavaScript.
         | 
| 121 | 
            +
            Based on Selenium Standalone DSL which run Firefox headlessly, it comprehences JavaScript completely.
         | 
| 98 122 |  | 
| 99 123 | 
             
            ### PMC architecture
         | 
| 100 124 |  | 
| @@ -106,19 +130,21 @@ In PMC architecture, Page is for listing items and pagenation. | |
| 106 130 |  | 
| 107 131 | 
             
            Model is for extracting information from detail page and store data to database.
         | 
| 108 132 |  | 
| 109 | 
            -
            Controller is for  | 
| 133 | 
            +
            Controller is for handling the above two.
         | 
| 110 134 |  | 
| 111 135 | 
             
            ### Web-based task execution
         | 
| 112 136 |  | 
| 113 137 | 
             
            Scraping tasks are often multiply and difficult to arrange.
         | 
| 114 138 |  | 
| 115 | 
            -
            Imagine Web-based task execution, definition, and scheduling like Jenkins.
         | 
| 139 | 
            +
            Imagine Web-based task execution, definition, csv-export and scheduling like Jenkins.
         | 
| 116 140 |  | 
| 117 141 | 
             
            ## TODO
         | 
| 118 142 |  | 
| 119 | 
            -
            - [ | 
| 120 | 
            -
            - [ | 
| 121 | 
            -
            - [ | 
| 143 | 
            +
            - [x] Fix module name. Dsl => DSL
         | 
| 144 | 
            +
            - [x] Defalut config
         | 
| 145 | 
            +
            - [x] Add API document
         | 
| 146 | 
            +
            - [x] TravisCI
         | 
| 147 | 
            +
            - [ ] Log
         | 
| 122 148 |  | 
| 123 149 | 
             
            ## Contributing
         | 
| 124 150 |  | 
| @@ -1,16 +1,13 @@ | |
| 1 | 
            -
            module  | 
| 1 | 
            +
            module SeleniumStandaloneDSL
         | 
| 2 2 | 
             
              class Base
         | 
| 3 3 | 
             
                attr_reader :driver
         | 
| 4 4 |  | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
                  # Initialize instance variables
         | 
| 12 | 
            -
                  @config = config
         | 
| 13 | 
            -
                  @logger = Logger.new(@config[:log_path])
         | 
| 5 | 
            +
                def initialize(log_path: '/tmp/selenium_standalone_dsl',
         | 
| 6 | 
            +
                               user_agent: 'Selenium Standalone DSL', headless: false)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  if headless
         | 
| 9 | 
            +
                    Headless.new(reuse: false, destroy_at_exit: true).start
         | 
| 10 | 
            +
                  end
         | 
| 14 11 |  | 
| 15 12 | 
             
                  # Extends timeout
         | 
| 16 13 | 
             
                  client = Selenium::WebDriver::Remote::Http::Default.new
         | 
| @@ -18,17 +15,13 @@ module SeleniumStandaloneDsl | |
| 18 15 |  | 
| 19 16 | 
             
                  # Create profile so that each driver instance has its own cookie
         | 
| 20 17 | 
             
                  profile = Selenium::WebDriver::Firefox::Profile.new
         | 
| 21 | 
            -
                  profile['general.useragent.override'] =  | 
| 18 | 
            +
                  profile['general.useragent.override'] = user_agent
         | 
| 22 19 | 
             
                  profile.native_events = true
         | 
| 23 20 |  | 
| 24 | 
            -
                  if @config[:headless]
         | 
| 25 | 
            -
                    headless = Headless.new(reuse: false, destroy_at_exit: true)
         | 
| 26 | 
            -
                    headless.start
         | 
| 27 | 
            -
                  end
         | 
| 28 | 
            -
             | 
| 29 21 | 
             
                  @driver = Selenium::WebDriver::Driver.for(:firefox, :http_client => client, :profile => profile)
         | 
| 30 22 |  | 
| 31 | 
            -
                  @logger | 
| 23 | 
            +
                  @logger = Logger.new(log_path)
         | 
| 24 | 
            +
                  @logger.info '=' * 100
         | 
| 32 25 | 
             
                  @logger.info 'SeleniumStandaloneDsl started'
         | 
| 33 26 | 
             
                end
         | 
| 34 27 |  | 
| @@ -116,10 +109,6 @@ module SeleniumStandaloneDsl | |
| 116 109 |  | 
| 117 110 | 
             
                def quit
         | 
| 118 111 | 
             
                  @driver.quit
         | 
| 119 | 
            -
                  if @config[:headless]
         | 
| 120 | 
            -
                    headless = Headless.new(reuse: false, destroy_at_exit: true)
         | 
| 121 | 
            -
                    headless.start
         | 
| 122 | 
            -
                  end
         | 
| 123 112 | 
             
                end
         | 
| 124 113 | 
             
              end
         | 
| 125 114 | 
             
            end
         | 
| @@ -1,3 +1,3 @@ | |
| 1 | 
            -
            module  | 
| 2 | 
            -
              VERSION = "0.1. | 
| 1 | 
            +
            module SeleniumStandaloneDSL
         | 
| 2 | 
            +
              VERSION = "0.1.3"
         | 
| 3 3 | 
             
            end
         | 
| @@ -5,7 +5,7 @@ require 'selenium_standalone_dsl/version' | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 7 | 
             
              spec.name          = "selenium_standalone_dsl"
         | 
| 8 | 
            -
              spec.version       =  | 
| 8 | 
            +
              spec.version       = SeleniumStandaloneDSL::VERSION
         | 
| 9 9 | 
             
              spec.authors       = ["gosho-kazuya"]
         | 
| 10 10 | 
             
              spec.email         = ["ketsume0211@gmail.com"]
         | 
| 11 11 |  | 
| @@ -27,9 +27,9 @@ Gem::Specification.new do |spec| | |
| 27 27 | 
             
              spec.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 28 28 | 
             
              spec.require_paths = ["lib"]
         | 
| 29 29 |  | 
| 30 | 
            -
              spec. | 
| 31 | 
            -
              spec. | 
| 32 | 
            -
              spec. | 
| 30 | 
            +
              spec.add_runtime_dependency 'selenium-webdriver'
         | 
| 31 | 
            +
              spec.add_runtime_dependency 'nokogiri'
         | 
| 32 | 
            +
              spec.add_runtime_dependency 'headless'
         | 
| 33 33 |  | 
| 34 34 | 
             
              spec.add_development_dependency "bundler", "~> 1.12"
         | 
| 35 35 | 
             
              spec.add_development_dependency "rake", "~> 10.0"
         | 
    
        data/spec/base_spec.rb
    ADDED
    
    | @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe SeleniumStandaloneDSL::Base do
         | 
| 4 | 
            +
              before :all do
         | 
| 5 | 
            +
                @pid = Process.spawn('bundle e ruby spec/fixtures/app.rb')
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                config = {
         | 
| 8 | 
            +
                  log_path: '/tmp/selenium_standalone_dsl.log',
         | 
| 9 | 
            +
                  user_agent: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 ' +
         | 
| 10 | 
            +
                              '(KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
         | 
| 11 | 
            +
                  headless: true,
         | 
| 12 | 
            +
                }
         | 
| 13 | 
            +
                @driver = SeleniumStandaloneDSL::Base.new(config)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              after :all do
         | 
| 17 | 
            +
                @driver.quit
         | 
| 18 | 
            +
                Process.kill 9, @pid
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it 'visit a site' do
         | 
| 22 | 
            +
                expect { @driver.visit('http://localhost:4567') }.not_to raise_error
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it 'click a link and follow href' do
         | 
| 26 | 
            +
                @driver.visit 'http://localhost:4567/click'
         | 
| 27 | 
            +
                expect { @driver.click('ClickMe') }.not_to raise_error
         | 
| 28 | 
            +
                expect(@driver.driver.current_url).to eq 'http://localhost:4567/'
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              it 'fill_in a input box' do
         | 
| 32 | 
            +
                @driver.visit 'http://localhost:4567/fill_in'
         | 
| 33 | 
            +
                expect { @driver.fill_in('input_box', with: 'hoge') }.not_to raise_error
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              it 'close alert' do
         | 
| 37 | 
            +
                @driver.visit 'http://localhost:4567/alert'
         | 
| 38 | 
            +
                expect { @driver.prompt_ok }.not_to raise_error
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              it 'select a value in a select box' do
         | 
| 42 | 
            +
                @driver.visit 'http://localhost:4567/select'
         | 
| 43 | 
            +
                expect { @driver.select('an option', from: 'select_box') }.not_to raise_error
         | 
| 44 | 
            +
                expect { @driver.select('an option', from: 'select_box', find_by: :name) }.not_to raise_error
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              it 'determine if the page has the text' do
         | 
| 48 | 
            +
                @driver.visit 'http://localhost:4567/'
         | 
| 49 | 
            +
                expect(@driver.has_element?(:text, 'Hello')).to be true
         | 
| 50 | 
            +
                expect(@driver.has_element?(:text, 'Hogehogehoge')).to be false
         | 
| 51 | 
            +
                expect(@driver.has_element?(:class, 'title')).to be true
         | 
| 52 | 
            +
                expect(@driver.has_element?(:class, 'titleIsNotBlank')).to be false
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              it 'search with Nokogiri' do
         | 
| 56 | 
            +
                @driver.visit 'http://localhost:4567/search'
         | 
| 57 | 
            +
                expect(@driver.search('th:contains("title") + td').inner_html).to eq 'Hello'
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         | 
| 60 | 
            +
             | 
| @@ -1,64 +1,7 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe  | 
| 3 | 
            +
            describe SeleniumStandaloneDSL do
         | 
| 4 4 | 
             
              it 'has a version number' do
         | 
| 5 | 
            -
                expect( | 
| 6 | 
            -
              end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              describe SeleniumStandaloneDsl::Base do
         | 
| 9 | 
            -
                before :all do
         | 
| 10 | 
            -
                  @pid = Process.spawn('bundle e ruby spec/fixtures/app.rb')
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  config = {
         | 
| 13 | 
            -
                      log_path: '/tmp/selenium_standalone_dsl_spec.log',
         | 
| 14 | 
            -
                      user_agent: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
         | 
| 15 | 
            -
                      headless: true,
         | 
| 16 | 
            -
                  }
         | 
| 17 | 
            -
                  @driver = SeleniumStandaloneDsl::Base.new(config)
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                after :all do
         | 
| 21 | 
            -
                  @driver.quit
         | 
| 22 | 
            -
                  Process.kill 9, @pid
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                it 'visit a site' do
         | 
| 26 | 
            -
                  expect { @driver.visit('http://localhost:4567') }.not_to raise_error
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                it 'click a link and follow href' do
         | 
| 30 | 
            -
                  @driver.visit 'http://localhost:4567/click'
         | 
| 31 | 
            -
                  expect { @driver.click('ClickMe') }.not_to raise_error
         | 
| 32 | 
            -
                  expect(@driver.driver.current_url).to eq 'http://localhost:4567/'
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                it 'fill_in a input box' do
         | 
| 36 | 
            -
                  @driver.visit 'http://localhost:4567/fill_in'
         | 
| 37 | 
            -
                  expect { @driver.fill_in('input_box', with: 'hoge') }.not_to raise_error
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                it 'close alert' do
         | 
| 41 | 
            -
                  @driver.visit 'http://localhost:4567/alert'
         | 
| 42 | 
            -
                  expect { @driver.prompt_ok }.not_to raise_error
         | 
| 43 | 
            -
                end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                it 'select a value in a select box' do
         | 
| 46 | 
            -
                  @driver.visit 'http://localhost:4567/select'
         | 
| 47 | 
            -
                  expect { @driver.select('an option', from: 'select_box') }.not_to raise_error
         | 
| 48 | 
            -
                  expect { @driver.select('an option', from: 'select_box', find_by: :name) }.not_to raise_error
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                it 'determine if the page has the text' do
         | 
| 52 | 
            -
                  @driver.visit 'http://localhost:4567/'
         | 
| 53 | 
            -
                  expect(@driver.has_element?(:text, 'Hello')).to be true
         | 
| 54 | 
            -
                  expect(@driver.has_element?(:text, 'Hogehogehoge')).to be false
         | 
| 55 | 
            -
                  expect(@driver.has_element?(:class, 'title')).to be true
         | 
| 56 | 
            -
                  expect(@driver.has_element?(:class, 'titleIsNotBlank')).to be false
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                it 'search with Nokogiri' do
         | 
| 60 | 
            -
                  @driver.visit 'http://localhost:4567/search'
         | 
| 61 | 
            -
                  expect(@driver.search('th:contains("title") + td').inner_html).to eq 'Hello'
         | 
| 62 | 
            -
                end
         | 
| 5 | 
            +
                expect(SeleniumStandaloneDSL::VERSION).not_to be nil
         | 
| 63 6 | 
             
              end
         | 
| 64 7 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: selenium_standalone_dsl
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - gosho-kazuya
         | 
| @@ -137,11 +137,12 @@ files: | |
| 137 137 | 
             
            - LICENSE
         | 
| 138 138 | 
             
            - README.md
         | 
| 139 139 | 
             
            - Rakefile
         | 
| 140 | 
            -
            -  | 
| 140 | 
            +
            - examples/yahoo_searcher.rb
         | 
| 141 141 | 
             
            - lib/selenium_standalone_dsl.rb
         | 
| 142 142 | 
             
            - lib/selenium_standalone_dsl/base.rb
         | 
| 143 143 | 
             
            - lib/selenium_standalone_dsl/version.rb
         | 
| 144 144 | 
             
            - selenium_standalone_dsl.gemspec
         | 
| 145 | 
            +
            - spec/base_spec.rb
         | 
| 145 146 | 
             
            - spec/selenium_standalone_dsl_spec.rb
         | 
| 146 147 | 
             
            homepage: https://github.com/acro5piano/selenium_standalone_dsl
         | 
| 147 148 | 
             
            licenses:
         | 
| @@ -168,4 +169,5 @@ signing_key: | |
| 168 169 | 
             
            specification_version: 4
         | 
| 169 170 | 
             
            summary: Gem for using Selenium webdriver simply
         | 
| 170 171 | 
             
            test_files:
         | 
| 172 | 
            +
            - spec/base_spec.rb
         | 
| 171 173 | 
             
            - spec/selenium_standalone_dsl_spec.rb
         |