Извините, но я не могу разобраться в этом, прежде чем рефакторинг вашего кода, чтобы он выглядел как 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])