ruby Selenium 自动化测试
打开浏览器
require 'selenium-webdriver'
driver=Selenium::WebDriver. for:chrome
driver.get("www.baidu.com")
driver=Selenium::WebDriver. for:ie
driver.get("www.baidu.com")
浏览器窗口设置
driver.manage.window.maximize #窗口最大化
Headless mode
#在一些场景下测试工程师需要在不打开浏览器的情况下进行自动化测试,也就是以headless的方式运行自动化测试。
现在全球最受欢迎的浏览器Chrome在Chrome 59 (Chrome 60 for Windows)版本中已经支持了headless mode,只需要配置一些简单的参数就可以实现。
require 'selenium-webdriver'
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--remote-debugging-port=9222')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get "https://www.acitve.com"
driver.save_screenshot("#{File.dirname(__FILE__)}/#{Time.now.strftime("%F")}")
关闭浏览器
driver.close # 关闭当前窗口
driver.quit # 关闭浏览器 不仅关闭窗口,还会彻底的退出webdriver,释放与driver server之间的连接
窗口操作
driver.title
puts driver.title #打印窗口title
driver.switch_to.window(driver.window_handles[0]) #切换第一个窗口
driver.switch_to.window(driver.window_handles[-1]) #切换到最后一个窗口
driver.window_handles.length #窗口个数
iframe
driver.switch_to.frame(id) #进入frame
driver.switch_to.frame(1) #进入第一个frame
driver.switch_to.default_content #退出所有frame
driver.switch_to.frame(driver.find_element(:xpath,"//*[@id='123']")) #通过xpath进入frame
窗口刷新,返回,前进
#刷新窗口
driver.navigate.refresh
#返回
dr.navigate.back()
#前进
dr.navigate.forward()
简单的元素定位
#id
driver.find_element(:id,"123").click
#name
driver.find_element(:name,""123).click
#css
driver.find_element(:css,"123").click
#xpath
driver.find_element(:xpath,"//*[@id='123']").click
简单的元素操作
#点击
driver.find_element(:xpath,"//*[@id='123']").click
#删除
driver.find_element(:xpath,"//*[@id='123']").clear
#输入
driver.find_element(:xpath,"//*[@id='123']").send_keys"123456"
等待时间
1、强制等待 sleep
sleep 0.5 #制等待0.5秒
sleep 5 #强制等待5秒
2、隐式等待
隐式等待未全局等待,设置一次全局生效;
driver.manage.timeouts.implicit_wait = 10 #等待10元素未出现时抛出NoSuchElement异常
3、显示等待
显式等待通过Selenium::WebDriver::Wait对象,设置一个等待的条件,条件成立时继续执行,超过timeout则抛出异常,ignore为遇到Selenium::WebDriver::Error::JavascriptError异常时不抛出
wait = Selenium::WebDriver::Wait.new({:timeout=>15,:interval=>0.2,:ignore=>Selenium::WebDriver::Error::JavascriptError})
wait.until{driver.find_element(:xpath,"//*[@id='123']").displayed?}
driver.action.move_to(“元素位置”).perform
元素被遮挡 处理方法
1、元素聚焦
arguments[0]表示第一个参数,argument[1]表示第二个参数
target = driver.find_element(:xpath,"//label[@title='#{menu}']")
driver.execute_script("arguments[0].scrollIntoView();", target)
2、直接点击
target = driver.find_element(:xpath,"//label[@title='#{menu}']")
driver.execute_script("arguments[0].click()", target)