Ruby没有从excel文件中输入文本字段中的文本

时间:2014-10-30 19:47:47

标签: ruby excel selenium

我有一个包含有效和无效登录组合的电子表格。我在Selenium中使用Ruby编写了测试,将用户名和密码传递给我正在测试的网站中的文本字段。

没有输入用户名和密码。事实上,测试似乎停留在一个连续的循环而不会结束,而它仍然专注于登录窗口。

以下是我遇到的代码片段:

require "win32ole"

xl = WIN32OLE.new('Excel.Application')
xl.Visible = true
xl.displayAlerts = false
wb = xl.Workbooks.open("C:/.../login.xlsx")
ws = wb.Worksheets(1)
ws.select

rows = 2
while rows <= 3
  username = ws.Cells(rows, "A").text
  password = ws.Cells(rows, "B").text
end

#invalid login
@driver.find_element(:id, "tbLUser").clear
@driver.find_element(:id, "tbLUser").send_keys(username)
@driver.find_element(:id, "tbLPass").clear
@driver.find_element(:id, "tbLPass").send_keys(password)
assert element_present?(:name, "lg5_login")
@driver.find_element(:name, "lg5_login").click

任何人都可以帮我解决这段代码中的这个问题,我很感激。

2 个答案:

答案 0 :(得分:1)

从您的代码开始而不是太过侵入性,您可以尝试类似的东西:

(2..ws.UsedRange.Rows.Count).each do |row|  # go through each row with data
  username = ws.Cells(row, "A").Value
  password = ws.Cells(row, "B").Value
  is_valid = ws.Cells(row, "C").Value   # 3rd column with TRUE/FALSE boolean values

  @driver.find_element(:id, "tbLUser").clear
  @driver.find_element(:id, "tbLUser").send_keys(username)
  @driver.find_element(:id, "tbLPass").clear
  @driver.find_element(:id, "tbLPass").send_keys(password)
  assert element_present?(:name, "lg5_login")
  @driver.find_element(:name, "lg5_login").click
  # One method for each case, an if/else with an inline check would also be fine
  is_valid ? assert_valid_result : assert_invalid_result
end

答案 1 :(得分:0)

这里不需要while循环,因为您只想迭代Excel工作表中的行数。您可以使用:times

rows = 2
rows.times do
  username = ws.Cells(rows, "A").text
  password = ws.Cells(rows, "B").text
end

# your rest of the code 

我想在此指出的一点是,rows.times username passwordrows = 2 users = rows.times.with_object({}){ |i, u| u["row #{i+1}"] = { 'username' => 'd', 'password' => 'r' } } 将被块的最后一次迭代覆盖。为了防止您可以创建哈希:

users['row 1']['username'] #=> 'user 1'
users['row 2']['username'] #=> 'user 2'

现在,您可以按行逐行访问您的用户:

{{1}}