Ruby+Selenium多子域名网站测试:解决split方法未定义报错
问题解决
错误根源
ARGV是Ruby接收命令行参数的数组,你执行ruby test.rb test1,test2,test3时,所有子域名被当作单个元素存入数组(即["test1,test2,test3"])。数组没有split方法,直接调用就会触发NoMethodError。另外代码还存在变量名错误——循环中用了未定义的sub,应该是遍历变量cub。
修正后的代码
require 'rubygems' require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome page_load = sleep 1 # 获取第一个命令行参数,按逗号分割得到子域名列表 sub_domains = ARGV[0].split(",") sub_domains.each do |sub| url = "http://#{sub}.test.com" driver.get url puts "#{url}" begin driver.find_element(:id, 'user_login').send_keys 'user 1' driver.find_element(:id, 'user_password').send_keys 'password1' driver.find_element(:id, 'login_button').click puts '登录成功' rescue StandardError puts '登录失败' end page_load puts '测试完成' sleep 5 end driver.quit
优化建议
- 更符合命令行习惯的传参方式:用空格分隔子域名(执行
ruby test.rb test1 test2 test3),此时直接用sub_domains = ARGV即可,无需调用split。 - Ruby变量名推荐用下划线命名法(比如
page_load),比驼峰式更贴合社区规范。
内容的提问来源于stack exchange,提问作者David Hurl
相关产品推荐
相关产品推荐

