watir - 它能同时使用watir-webdriver和selenium-webdriver吗?

时间:2017-10-20 03:38:26

标签: cucumber capybara watir watir-webdriver

我是自动化的新手,如果标题不合适,我很抱歉。

我按照指南安装了Ruby,Devkit,gem json,黄瓜,水豚,selenium-webdriver,rspec http://www.swtestacademy.com/ruby-cucumber-and-capybara-on-windows/

但是我找不到使用完整xpath的元素(使用xpath插件和开发人员工具检查和验证),我的操作是:

page.find(:xpath, "my_xpath").send_keys(yyy)

我得到了: 无法找到可见的xpath

我也尝试过:

page.findElement(By.xpath("my_xpath")).send_keys("ori_pw")

我得到了: 未初始化的常量By(NameError)

我想尝试使用watir,我已经安装了gem watir,watir-webdriver。 并在我的env.rb中添加了'watir' 然后我试试:

page.input(:name => "xxx").set(yyy)

但我得到:#(NoMethodError)的未定义方法`input'

我可以请一些建议吗? 感谢。

=============================================编辑# 1

我的env.rb现在看起来像这样:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'
require 'rspec'
require "selenium-webdriver"
require 'watir'
require 'cucumber'

Selenium::WebDriver::Firefox::Binary.path='C:\Program Files\Mozilla Firefox\firefox.exe'

Capybara.run_server = false
#Set default driver as Selenium
Capybara.default_driver = :selenium
#Set default selector as css
Capybara.default_selector = :cs

#Syncronization related settings
module Helpers
    def without_resynchronize
        page.driver.options[:resynchronize] = false
        yield
        page.driver.options[:resynchronize] = true
    end
end
World(Capybara::DSL, Helpers)

如何禁用水豚并正确设置watir? 对不起,我没有技术背景......

托马斯,是元素是可见的, HTML screenshot 实际上我将为这3个密码字段设置值。 我正在尝试的xpath是:

/html/body[@class='modal-open']/app-root/div[@id='wrapper']/app-navigation/user-change-password/div[@id='myModal']/div[@class='modal-dialog modal-lg']/div[@class='modal-content']/div[@class='modal-body']/form[@class='ng-pristine ng-invalid ng-touched']/fieldset[@class='form-horizontal']/div[@class='form-group'][1]/div[@class='col-sm-7']/input[1]

(最后我使用避免使用类,因为我看到类名有时不同) 谢谢。 =============================================编辑#2

问题现在转移到了chromedriver。 双击它可以显示

Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 9515
Only local connections are allowed.

但是在cmd上输入chromedriver会显示Chromedriver.exe已停止工作。

1 个答案:

答案 0 :(得分:1)

它不适合你的原因是由于geckodriver / firefox中的一个不幸的错误 - 这可能也会影响watir - 它假设任何具有hidden属性的元素实际上都是非-visible(如果显示样式设置为默认值以外的任何值,它实际上会覆盖隐藏属性,但不会涉及selenium)。这会影响到你,因为元素hidden上的div#myModal属性使得selenium认为整个模态是不可见的 - https://github.com/mozilla/geckodriver/issues/864。如果你改用Chrome测试,问题就会消失。

此外,如您所示,使用XPath是一个可怕的想法,并将导致高度脆弱的测试。如果您更换为Chrome(Capybara.default_driver = :selenium_chrome),那么只需执行类似

的操作就可以了得更好
page.fill_in('Original Password', with: 'blah')

page.find('input[name="originalPassword"]`).set('blah')

最后一点,:resynchronize选项很久以前就消失了,您可能想要找到更新的指南