Почему я получаю сообщение об ошибке «NameError: неинициализированная константа Gmails :: Username» - PullRequest
0 голосов
/ 28 декабря 2018

Как я могу передать значение строки [0,1] в Gmails.SetPassword. Пожалуйста, предложите изменить для того же. Ниже приведен код для того же.

module Gmails
  extend RSpec::Matchers
  extend Capybara::DSL

  $Gmails_Username_Input= "//input[@id='identifierId']"
  $Gmails_IdentifierNext_Button="div[id= 'identifierNext']"
  $Gmails_Password_Input="input[name= 'password']"
  $Gmails_PasswordNext_Button="div[id='passwordNext']"

  book = Spreadsheet.open('Data.xls')
  sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
  sheet1.each do |row|
    break if row[0].nil? # if first cell empty
    puts row.join(',') # looks like it calls "to_s" on each cell's Value
    puts row[0,1]
  end

  def Gmails.OpenGmail
    visit "https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin"
  end  

  def Gmails.SetEmailId
    Gmails.SetElement $Gmails_Username_Input, row[0,1]
  end

  def Gmails.ClickNext
    Gmails.ClickElement $Gmails_IdentifierNext_Button
  end

  def Gmails.SetPassword
    Gmails.SetElement $Gmails_Password_Input, row[1,1]
  end

  def Gmails.ClickPasswordNext
    Gmails.ClickElement $Gmails_PasswordNext_Button
  end

  def Gmails.ClickElement objectpath
    if(objectpath.start_with?('/'))
      find(:xpath, objectpath).click
    else
      find(:css, objectpath).click
    end
  end

  def Gmails.SetElement objectpath ,gmailsTextValue
    if(objectpath.start_with?('/'))
      find(:xpath, objectpath).set gmailsTextValue
    else
      find(:css, objectpath).set gmailsTextValue
    end
  end
end 

1 Ответ

0 голосов
/ 28 декабря 2018

Извините, но я не могу разобраться в этом, прежде чем рефакторинг вашего кода, чтобы он выглядел как Ruby:

module Gmails
  extend RSpec::Matchers
  extend Capybara::DSL

  book = Spreadsheet.open('Data.xls')
  sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
  sheet1.each do |row|
    break if row[0].nil? # if first cell empty
    puts row.join(',') # looks like it calls "to_s" on each cell's Value
    puts row[0,1]
  end

  def open_gmail
    visit "https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin"
  end

  def set_email_id(id)
    set_element "//input[@id='identifierId']", id
  end

  def click_next
    click_element "div[id= 'identifierNext']"
  end

  def set_password(password)
    set_element "input[name= 'password']", password
  end

  def click_password_next
    click_element "div[id='passwordNext']"
  end

  def find_element(object_path)
    find(object_path.start_with?('/') ? :xpath : :css, object_path)
  end

  def click_element(object_path)
    find_element(object_path).click
  end

  def set_element(object_path, value)
    find_element(object_path).set(value)
  end
end

Ладно, теперь глазам стало проще.Также обратите внимание, как я добавил параметры id и password в методы set_email_id и set_password.Теперь вы можете назвать их как set_password("secret_password").

Я думаю, когда вы спрашиваете, «как пройти row[0,1]», вы на самом деле не хотите этого делать.Я считаю, row[0] - это содержимое первого столбца, поэтому:

row = ['hello', 'world']
row[0] # => 'hello'

Когда вы звоните row[0,1], вы не запрашиваете значение первого столбца, вы запрашиваете фрагментмассива:

row[0,1] # => ['hello']
# same as: 
row.slice(0,1) # => ['hello']

Я полагаю, что вы действительно хотите, чтобы передать значение первого столбца в метод set_password:

def set_password(password)
  set_element "input[name= 'password']", password
end

set_password(row[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...