【问题标题】:watir - is it able to use watir-webdriver and selenium-webdriver in the same time?watir - 是否能够同时使用 watir-webdriver 和 selenium-webdriver?
【发布时间】:2018-04-01 05:01:03
【问题描述】:

我是自动化新手,如果标题不合适,请见谅。

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

但是我无法使用完整的 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 中添加了 require 'watir' 然后我尝试:

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

但我得到:# (NoMethodError) 的未定义方法“输入”

请给我一些建议好吗? 谢谢。

===============================================编辑# 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)

如何禁用 capybara 并正确设置 watir? 抱歉,我没有技术背景...

Thomas,是的,元素是可见的, 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已经停止工作。

【问题讨论】:

  • 您要查找的元素是否在页面上实际可见? (显示您请求的实际 XPath 和相关的 HTML 会有所帮助)并且您不能混合 capybara 和 watir,它们各自维护自己的会话。

标签: cucumber capybara watir watir-webdriver


【解决方案1】:

它不适合你的原因是 geckodriver/firefox 中的一个不幸的错误 - 这可能也会影响 watir - 它假定任何具有 hidden 属性的元素实际上是不可见的(如果显示样式设置为默认值以外的任何内容,它实际上会覆盖隐藏属性,但就 selenium 而言并非如此)。这会影响您,因为元素 div#myModal 上的 hidden 属性使 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 选项很久以前就消失了,您可能想找到一个更新的指南来遵循

【讨论】:

  • 感谢 Thomas,我将 Capybara.default_driver = :selenium 更改为 Capybara.default_driver = :selenium_chrome,但它说无法连接到 chromedriver 127.0.0.1:9515 (Selenium::WebDriver::Error:: WebDriverError) 我在 Win 10 x64 上,将 chromedriver (v2.33) 放在 C:\webdriver 中,并且已经将路径添加到 Path 系统变量。
  • @user8750496 听起来好像 chromedriver 没有正确启动。尝试手动运行它,看看它是否给出任何错误。 Chrome 是否位于标准位置,如果不是,请尝试设置 Selenium::WebDriver::Chrome::Binary.path,就像您为 Firefox 设置的那样。如果这些都没有解决,你将不得不在调试模式下运行,或者启用 chromedriver 日志,看看日志是否告诉你任何事情
  • 如果我进入目录并双击它可以显示Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 9515 Only local connections are allowed.但是当我在cmd上输入chromedriver时,它显示Chromedriver.exe已经停止工作。我试图设置Selenium::WebDriver::Chrome::Binary.path,但它说uninitialized constant Selenium::WebDriver::Chrome::Binary (NameError)
  • @user8750496 确保在 PATH 的某个地方没有其他版本的 chromedriver - 除了我猜不到
  • 我只是把一个chromedriver.exe和geckodriver.exe放在同一个文件夹C:\webdriver
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多