我正在改进我的测试,RSpec
并capybara-webkit
试图删除所有css
和xpath
选择器之类的
find('#edit_user > div:nth-child(7) > div > div > button').click
Run Code Online (Sandbox Code Playgroud)
我正在寻找替代它们的最佳选择.
我打算使用css class
元素,但一些"专业"水豚测试人员说这不是最好的选择.
所以我的问题是:我可以data
在测试中使用这些属性吗?
如果我有一个元素
<button name="button" type="submit" class="button last" data-test="edit.update">Update/button>
Run Code Online (Sandbox Code Playgroud)
我能做到吗?
find('edit.update').click
Run Code Online (Sandbox Code Playgroud)
?
你觉得这是个好主意吗?如果您对此主题有更多想法/信息,请随时发表评论!
随着Rails 5.1的发布,它们包括了系统测试.这意味着我们也可以在Rails中测试我们的JavaScript.我看到Rails指南解释了以两种方式创建文章的示例测试:通过系统测试和集成测试.
现在问题是:在Rails 5.1之前,我在集成测试中编写了复杂的测试用例.但现在我有两个选项来编写测试用例.我可以写测试用例
test: should create article
Run Code Online (Sandbox Code Playgroud)
在集成测试中,我也可以在系统测试中编写相同的测试用例.
那么我何时应该选择系统测试来编写测试用例以及何时选择集成测试?
testing integration-testing ruby-on-rails acceptance-testing capybara
这是我的一部分spec_helper.rb
:
RSpec.configure do |config|
config.before(:each) do
login(email, password)
visit root_url
end
end
Run Code Online (Sandbox Code Playgroud)
我需要的所有(20+)测试除了一个.
有没有办法避免单个测试执行before hook
?
我试图阻止我的规范中的 URL,实现了我在使用时所做的事情capybara_webkit
:
Capybara::Webkit.configure do |config|
config.block_url("*google*")
config.allow_url('*my_website.com')
end
Run Code Online (Sandbox Code Playgroud)
阅读本文后,我尝试执行以下操作:
require 'webmock/rspec'
module WebmockConfig
def self.default_disabled_urls
[
'*google*'
]
end
end
WebMock.disable_net_connect!(allow_localhost: true)
WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
Run Code Online (Sandbox Code Playgroud)
但我得到
禁用真正的 HTTP 连接。未注册的请求:POST http://127.0.0.1/session
即使那应该由WebMock.disable_net_connect!(allow_localhost: true)
.
在没有 的情况下运行规范时WebMock.disable_net_connect!(allow: WebmockConfig.default_disabled_urls)
,一切正常。
我有以下带有2个项目的TabBarController。显示正确。
setupItems()
当something
更改其值时,我正在从另一个控制器调用该函数。
该函数已正确调用,问题navFirstController.tabBarItem.image
是未更新。
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupItems()
}
func setupItems() {
let scale: CGFloat = 0.35
let navFirstController = UINavigationController(rootViewController: FirstController())
let navSecondController = UINavigationController(rootViewController: SecondController())
navSecondController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image2")!, by: scale)
navSecondController.tabBarItem.imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -8, right: 0)
if something == true {
navFirstController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image1")!, by: scale)
} else {
navFirstController.tabBarItem.image = UIImage.scale(image: UIImage(named: "image3")!, by: scale)
}
navFirstController.tabBarItem.imageInsets = UIEdgeInsets(top: …
Run Code Online (Sandbox Code Playgroud) 在我的spec_helper文件中,我有:
Capybara.javascript_driver = :webkit
Run Code Online (Sandbox Code Playgroud)
capybara_webkit现在有一个ignore_ssl_errors
我想要使用的选项.如何在spec_helper中指定?
我试图
describe "test", :js => true do
it "test" do
Capybara.default_max_wait_time = 3
Capybara::Webkit.configure do |config|
config.allow_unknown_urls
end
my test
end
it "test2" do
...
end
end
Run Code Online (Sandbox Code Playgroud)
替换我在 spec_helper 中的水豚配置仅用于单个测试,但我收到错误“所有配置必须在驱动程序启动之前进行”。
这是我的spec_helper
Capybara.run_server = false
Capybara.default_max_wait_time = 1
Capybara.javascript_driver = :webkit_with_qt_plugin_messages_suppressed
Capybara::Webkit.configure do |config|
config.block_unknown_urls
end
RSpec.configure do |config|
config.include Capybara::DSL
end
Run Code Online (Sandbox Code Playgroud)
有办法做到吗?
我正在尝试在运行我的规范时模拟不同的设备,但目前没有结果。
#spec_helper
require 'rspec'
require 'capybara'
require 'capybara/rspec'
require 'selenium/webdriver'
Capybara.register_driver :headless_chrome do |app|
Capybara::Selenium::Driver.load_selenium
browser_options = ::Selenium::WebDriver::Chrome::Options.new
browser_options.args << '--headless'
mobile_emulation = { "deviceName" => "iPhone 8" }
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
"chromeOptions" => { "mobileEmulation" => mobile_emulation }
)
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options, desired_capabilities: capabilities)
end
Run Code Online (Sandbox Code Playgroud)
我应该mobile_emulation
在选项中包含该部分而不是功能吗?
我有一个看起来像的字符串
"AaaBbbCcc DddEee"
我正在分裂它
my_string.scan(/[A-Z][a-z]+/)
Run Code Online (Sandbox Code Playgroud)
结果是
["Aaa","Bbb","Ccc","Ddd","Eee"]
我想要实现的是,如果大写字母前面有一个空格,则不拆分字符串,因此结果看起来像
["Aaa","Bbb","Ccc Ddd","Eee"]
我有一些按年份编目的运动比赛,每场比赛我都有最终结果,比赛日期和得分手.
我在'Table View'中显示这些匹配,如下所示:
所以我想要实现的是:当点击一个单元格时,显示匹配的详细信息,如图所示.
我还发现了一些库来实现手风琴/可扩展的风格,但是没有人能做到这一点.他们只是扩展细胞并显示另一个细胞.
RSpec中是否有一种方法可以显示每个测试持续时间而不仅仅是总套件持续时间?
现在我们有
完成时间为7分31秒(文件加载时间为4.71秒)
但我想有类似的东西
User accesses home and
he can sign up (finished in 1.30 seconds)
he can visit profile (finished in 3 seconds)
.
.
.
Finished in 7 minutes 31 seconds (files took 4.71 seconds to load)
Run Code Online (Sandbox Code Playgroud) 我想在我的页面上找到任何带有给定文本的元素,但是当我将它传递给没有元素的查找时,它会给我一个错误
find(material.attachment_filename) #material.attachment_filename is "01. pain killer.mp3"
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
find('a',text: material.attachment_filename)
Run Code Online (Sandbox Code Playgroud)
它工作正常,给定的错误是:
硒:: webdriver的::错误:: InvalidSelectorError:
给定css选择器表达式"01. pain killer.mp3"无效:SyntaxError:指定了无效或非法字符串
capybara ×9
rspec ×6
ruby ×6
testing ×4
ios ×2
accordion ×1
expandable ×1
objective-c ×1
regex ×1
selenium ×1
string ×1
swift ×1
swift5 ×1
uitableview ×1
webmock ×1