[ruby-list:50753] Re: [質問] rescue節で、他パッケージのメッセージ出力を抑止したい
From:
"Masa Sakano" <imagine@...>
Date:
2019-05-02 12:10:15 UTC
List:
ruby-list #50753
坂野正明です。
On 2 May 2019, at 4:15, Takahiro Yamaguchi wrote:
> 山口と申します。
>
> 下記のプログラム(抜粋)を実行すると、
>
> @wait = Selenium::WebDriver::Wait.new(timeout: 10)
>
> begin
> [INFO] Checking alertTitle dialog ...
> dialog_alert = @wait.until { @driver.find_element(id:
> "com.aspiro.tidal:id/alertTitle").displayed? }
>
> if dialog_alert
> puts "[WARN] alertTitle dialog appeared!"
> puts "[WARN] Clickc OK! to continue"
> @driver.find_element(id: "android:id/button1").click
> else
> puts "[ERROR] alertTitle dialog not appeared!"
> end
> rescue # Selenium::WebDriver::Error::TimeoutError
> puts "[INFO] No alertTitle dialog"
> end
>
>
> 出力が、下記の様になり、
>
> [INFO] Checking alertTitle dialog …
> 2019-05-02 12:06:59 WARN Selenium [DEPRECATION]
> Selenium::WebDriver::Error::TimeOutError is deprecated. Use
> Selenium::WebDriver::Error::TimeoutError (ensure the driver supports
> W3C WebDriver specification) instead.
> [INFO] No alertTitle dialog
>
> rescue節で、
>
> 2019-05-02 12:06:59 WARN Selenium [DEPRECATION]
> Selenium::WebDriver::Error::TimeOutError is deprecated. Use
> Selenium::WebDriver::Error::TimeoutError (ensure the driver supports
> W3C WebDriver specification) instead.
>
> 他パッケージの出力が表示されるのを、抑止したいのですが、
> 良い方法をご教示いただけますでしょうか?
「良い」方法ではありませんが、該当箇所で一時的に
STDERRの出力を抑止すれば、当座の解決にはなりましょうか。
例えば、以下のようなメソッドを定義します。
https://gist.github.com/bec1858c7b2555106beccd93e9cb65b2.git
# @param backup_file [String] Filename to backup STDERR
# @return [Object] Returned value of the given block
# @yield [] Block to execute, in which STDERR is suppressed.
def suppress_stderr(backup_file='/dev/null')
stderr_orig = $stderr
$stderr.sync
$stderr.reopen(backup_file, 'w')
yield
ensure
$stderr.sync
$stderr = stderr_orig
end
これを用いて、もし該当の警告メッセージが
`@wait.until`
実行中に出ているならば、以下のようにできます。
dialog_alert = suppress_stderr {
@wait.until { @driver.find_element(id:
"com.aspiro.tidal:id/alertTitle").displayed? }
}
あるいは、begin
節全体をブロックに入れて指定することも勿論できます。
なお、提示のケースの場合、
「rescue節で」警告メッセージが表示されているのではなく、Exception
が raise される直前、
すなわち
rescueに飛ぶ直前に、警告メッセージが表示されているのでしょう。
ご参考までに。
坂野正明