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您的usernamepassword将由该块的最后一次迭代覆盖。 为了防止你可以创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'