我有一个问题,我应该以10:10:10
(hh:mm:ss)或10:10
(mm:ss)或10
(ss)的形式获得用户输入.现在我需要检查以下参数:
mm:ss
那么秒被限制为0..59并且分钟是无限的.hh:mm:ss
那么秒和分钟都限制在0..59,而小时是无限的.然后返回一个TimeDelta对象.
天真的方法是编写乘法if
语句来检查所有这些.但我正在寻找一种更顺畅的方式.
val = "11:66:11"
try:
val = map(int, val.split(':'))
except ValueError:
return False
if len(val) == 1:
return val
if len(val) == 2:
if val[1] > 59:
print "Bad seconds"
return False
if len(val) == 3:
if val[2] > 59 or val[1] >59:
print "Bad seconds / minutes"
return False
while len(val) < 3:
split.insert(0,0)
return = timedelta(hours=split[0],minutes=split[1],seconds=split[2])
Run Code Online (Sandbox Code Playgroud) 我有这个简单的例子:
require 'watir-webdriver'
arr = []
sites = [
"www.google.com",
"www.bbc.com",
"www.cnn.com",
"www.gmail.com"
]
sites.each do |site|
arr << Thread.new {
b = Watir::Browser.new :chrome
b.goto site
puts b.url
b.close
}
end
arr.each {|t| t.join}
Run Code Online (Sandbox Code Playgroud)
每次我运行这个脚本,我都会
ruby/2.1.0/net/http.rb:879:in `initialize': Connection refused - connect(2) for "127.0.0.1" port 9517 (Errno::ECONNREFUSED)
Run Code Online (Sandbox Code Playgroud)
或者其中一个浏览器在至少其中一个线程上意外关闭.
另一方面,如果我sleep 2
在每个循环周期结束时设置,一切运行顺利!知道为什么会这样吗?
必须与理解线程如何工作有关...
是否可以将 watir-webdriver 附加到已打开的浏览器窗口?
我知道该方法Element#wait_until_present(t)
,但是如果此方法超时,则会引发timeOut异常。
有没有一种方法可以等待t
几秒钟,然后在元素存在时返回true,否则返回false?
我知道可以通过一个简单的begin..rescue..end
语句来完成,但是我正在寻找不使用异常的东西。
我有以下内容:
<ul class="a">
<li class="b">
<a class="c">
<span class="d">
<strong>text</strong>
</span>
</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我正试图从跨度中获取"文本".
当我尝试:
puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d')
Run Code Online (Sandbox Code Playgroud)
我把span
元素拿回来了.#<Watir::Span:0x007fa1d11edb18>
我应该这样做.
但在尝试时:
puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d').text
Run Code Online (Sandbox Code Playgroud)
我得到一个错误说:
unable to locate element, using {:class=>'b', :tag_name=>"li"}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
可以说我有这条线:
"My name is {name}".format(name="qwerty")
Run Code Online (Sandbox Code Playgroud)
我知道变量名是name
,所以我可以填写它.但是,如果内部的词{}
总是在变化,如下:
"My name is {name}"
"My name is {n}"
"My name is {myname}"
Run Code Online (Sandbox Code Playgroud)
我希望能够这样做:
"My name is {*}".format(*=get_value(*))
Run Code Online (Sandbox Code Playgroud)
哪里*
是什么都词是内给定{}
希望我很清楚.
编辑:
def get_value(var):
return mydict.get(var)
def printme(str):
print str.format(var1=get_value(var1), var2=get_value(var2))
printme("my name is {name} {lastname}")
printme("your {gender} is a {sex}")
Run Code Online (Sandbox Code Playgroud)
有了这个,我不能硬编码printme
函数内部的任何变量.
我已经阅读了文档,但没有发现任何提及。是否可以将参数传递给 json 配置文件中的自定义 logging.handler 类?
"handlers": {
"custom_handler": {
"class": "logging.CustomHandler",
"args": ['a', 'b'] # <------------------------
"level": "INFO",
"formatter": "custom"
}
},
Run Code Online (Sandbox Code Playgroud)
处理程序类定义在哪里:
class CustomHandler(logging.Handler):
def __init__(self, argA, argB):
super().__init__()
self.a = argA
self.b = argB
def emit(self, record):
<Some code>
Run Code Online (Sandbox Code Playgroud) 我找到了这个宝石:http://watirwebdriver.com/page-performance/
但我似乎无法理解这是什么措施
browser.performance.summary[:response_time]/1000
Run Code Online (Sandbox Code Playgroud)
从第二次打开浏览器开始测量吗?
Watir::Browser.new :chrome
Run Code Online (Sandbox Code Playgroud)
还是从最后的Watir-webdriver命令写的?
我怎样才能启动计时器?
**我已经尝试了几个脚本,但我一直都会得到0 seconds
这就是为什么我不确定.**