web-dev-qa-db-ja.com

RobotFramework-相対パスを使用してさまざまなディレクトリバリエーションからテストを実行する

RobotFrameworkテストスイートで問題が発生しています。私はこのような単純なテスト構造を持っています:

robotframework
|_foo
 |_tests folder
 |_pages folder
 |_firefoxTestProfile folder
 |_...

テストを実行するための最低限のFirefoxプロファイルパスを設定し、次のように変数を設定しました。

*** Variables ***
${FF_PROFILE}    foo\firefoxTestProfile
*** Keywords ***
Open browser window
    Open Browser    ${test_url}    ${browser}   
... ff_profile_dir=${FF_PROFILE}

トップディレクトリからテストを実行すると、正常に実行されます。

C:/robotframework$  pybot foo/tests/test.txt

ただし、次のようにfooディレクトリから実行しようとすると次のようになります。

C:/robotframework/foo$  pybot tests/test.txt

テストスローは失敗し、

"The system cannot find the path specified: foo/firefoxTestProfile/*.*"

パスを次のように置くなど、さまざまなことを試しました

../foo/firefoxTestProfile
/foo/firefoxTestProfile
firefoxTestProfile

また、firefoxTestProfileフォルダーをファイル構造内の別のパスに移動し、その新しいパスに更新しましたが、これは機能せず、以前と同じエラーメッセージが表示されました。

また、デフォルトのFirefoxプロファイルをテストで実行する必要があるため、これらのテストは異なるユーザー間で受け渡され、マシン上でローカルに実行されるため、これも重要です。どんな助けでも大歓迎です。

8
chmcc

パスを正しく定義するのに役立つ組み込み変数がいくつかあります。

ここで最も興味深いのは$ {CURDIR}です。

ドキュメントから:

${CURDIR}   An absolute path to the directory where the test data file is located.  This variable is case-sensitive.

私は通常、マスタースイートのセットアップファイル(あなたの場合はルートテストフォルダー)を定義し、そこで次の3つのグローバルレベル変数を定義します。

ルートtestsフォルダーにファイル__init.robotを作成します。

その中にスイートセットアップセクションを作成します(これはテストの前に実行されますが、1回だけです!)

Set Global Variable  ${testsRootFolder}  ${CURDIR}
Set Global Variable  ${pagesRootFolder}  %{CURDIR}${/}..${/}_pages
Set Global Variable  ${firefoxProfileFolder}  %{CURDIR}${/}..${/}firefoxTestProfile
17
Uri Shtand

残念ながら、Seleniumには非正規パスに関する問題があります(少なくともWindowsでは)。 ${/}..${/}に問題があることが判明し、Seleniumはそのような文字列を使用したファイル参照で失敗します。

これに対する解決策は、${CURDIR}と一緒に文字列ライブラリを使用することです。

${UpperDir} ${Leaf} Split String From Right ${CURDIR}   ${/}    1
1
M. Lampi

次のような相対パスを使用できます。

..${/}..${/}foo${/}firefoxTestProfile

テストを実行するファイルからの「firefoxTestProfile」の相対パスを指定する必要があります。

1
Deepti K