前言
Example
require 'watir-webdriver'
b = Watir::Browser.new
b.driver.manage.window.maximize
b.goto "http://xx.com"
b.link(:text => 'Create Account').click
b.text_field(:id => 'signupEmail').focus!.set "[email protected]"
b.text_field(:id => 'signupPassword').focus!.set "1234"
b.text_field(:id => 'passwordConfirm').focus!.set "1234"
b.checkbox(:id=> 'notifyOptin').focus!.set true
b.button(:id => 'signupSubmit').focus!.click
# or you can use:
# b.send_keys :enter
b.text.include? 'Welcome to XX website'
b.close
上面的示例中,很多text_field或button等元素使用了focus!方法,這是因爲webdriver無法和瀏覽器中未顯示的元素交互,否則會發生異常,當你擁有一個很長的列表在當前瀏覽器窗口中無法顯示時,如果去和未顯示的列表項交互就會發生這種異常。解決辦法是調用元素的focus方法,focus方法會將該元素滾動到視野中,但focus方法默認返回nil,如果調用該方法多次就不是一個hacky way。所以需要爲webdriver打個補丁,添加一個focus!方法:
class Watir::Element
def focus!
self.focus unless self.visible?
self
end
end
有的網站登錄會使用一個frame來呈現登錄窗口,webdriver可以很方便地和frame交互:
b.frame(:id => "content_ifr").text_field(:id=>'signinEmail').set "[email protected]"
b.frame(:id => "content_ifr").text_field(:id=>'signinEmail').set "234"
更多html元素的交互請看elements。
b.send_keys :enter
b.element.send_keys [:control, 'a'], :backspace
b.element.click(:shift, :control)