我是自动化的新手,如果标题不合适,我很抱歉。
我按照指南安装了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已停止工作。
答案 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
选项很久以前就消失了,您可能想要找到更新的指南