Ruby不从excel文件input文本字段中的文本
我有一个有效和无效login组合的电子表格。 我使用Ruby在Selenium中编写了testing,将用户名和密码传递给我正在testing的网站的文本字段。
它不input用户名和密码。 事实上,testing似乎停留在一个连续的循环,并没有结束,而仍然集中在login窗口。
以下是我遇到的代码片段:
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..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
你不需要一个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
和password
将由该块的最后一次迭代覆盖。 为了防止你可以创build一个哈希:
rows = 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'