File has no test case table in Robot FrameWork - robotframework

I've encountered a problem relating to Robot Framework test cases. After executing it, the console (cmd screen) displays error:
"[ ERROR ] Parsing 'Login_admin_page.txt' failed: File has no test case table."
Please take a look my test suite as well as test case and help me figure out the issue:
A. Structure of Test cases:
TS_test(folder)
--Login_admin_page.txt (--> main test case)
--resource.txt (--> resource file)
B. Content of test cases file:
Login_admin_page.txt
***Settings***
Documentation A resource file with reusable keywords and variables.
... This test is functionally identical to the example in
... valid_login.txt file
Resource resource.txt
Test Teardown Close Browser
***Test Cases***
Open Login page
Open Browser To Login Page
resource.txt
*** Settings ***
Documentation A resource file with reusable keywords and variables.
...
... The system specific keywords created here form our own
... domain specific language. They utilize keywords provided
... by the imported Selenium2Library.
Library Selenium2Library
*** Variables ***
${SERVER} http://google.com
${BROWSER} Firefox
${DELAY} 0
${VALID USER} admin
${VALID PASSWORD} admin
${INVALID USER} xyz
${INVALID PASSWORD} invalid
*** Keywords ***
Open Browser To Login Page
Open Browser ${SERVER} ${BROWSER}
Maximize Browser Window
Set Selenium Speed ${DELAY}
Login Page Should Be Open
Login Page Should Be Open
Title Should Be Google
Use cmd and access to folder "TS_test", execute "pybot Login_admin_page.txt". The screen displays error.
Thanks.

The error File has no test case table can only occur in one circumstance: you do not have a testcase table. If you have a test case table but have no test cases, you'll get a different error.
A testcase table is denoted by a line that begins with one or more asterisks and then the phrase "Test Case" or "Test Cases". Case doesn't matter, and trailing asterisks are ignored. A fairly common pattern seems to be to use multiple asterisks on both ends of the line, eg: *** Test Cases ***
If you try to give a file without such a heading to robot, you will get the error you report. For example, trying to run robot on a completely empty file will give that exact error. Also, if you misspell "Test Case", you'll get the same error.
Given that, I'm wondering if your error is simply that you forgot to save the file before trying to run it.

Please set proper line endings.
In my case I've changed from Mac (CR) to UNIX (LF)

How about encoding of your test case files? I saved unicode encoded test file and I use to have the same error. Save your test case files in UTF-8 and It will fix your problem.

I have encountered similar file - parsing errors using Robot Framework in the past, mostly when trying to use Microsoft Word to author html files (not recommended!). I have always found that following the advice given in the Robot Framework user Guide about Debugging eventually helps me track the problem down.
In this case, I would recommend you try switching on Robot Framework's syslog output and looking through to see what it has managed to parse, if anything, from your test case file. I recently used this to figure out a nasty UTF-8 character encoding problem introduced into a html test case file by Microsoft Word (again, not recommended unless you really have to!).
(From the User Guide):
#!/bin/bash
export ROBOT_SYSLOG_FILE=/tmp/syslog.txt
export ROBOT_SYSLOG_LEVEL=DEBUG
pybot --name Syslog_example path/to/tests

I had the same problem happen to me, and in my case it was simply a missing new line after * Test Cases * and the start of the actual test table.

This happened when you copy past the content of the test case file. In my case I have copied test case content and paste in nano editor
It got pasted something like below without proper spacing
*** Settings *** Library Selenium2Library *** Variables *** ${BROWSER} firefox *** Testcases *** Hello Open Browser http://www.google.com browser=${BROWSER}
Then I have intend and aligned properly like below and its works
*** Settings ***
Library Selenium2Library
*** Variables ***
${BROWSER} firefox
*** Testcases ***
Hello
Open Browser http://www.google.com browser=${BROWSER}

Related

Why should we use" test template" while using "data driver" library in robot framework?

I'm getting the following error:
Calling method '_start_suite' of listener 'Data Driver' failed: Attribute Error: No "Test Template" keyword found for first test case.
This is the code that generates that error:
* Settings *
Documentation practice
Library Data Driver file=../../Test Data/LoginData.xlsx sheet_name=Sheet 1
Library Selenium2 Library
Resource ../../Keywords/Login Keywords.robot
* Test Cases *
test case 1->login test with excel
Open Website in chrome and
Login with valid username and
Logout Off the application
Goes as per documentation-
Test cases have to be defined with a Test Template. Reason for this
is, that the DataDriver needs to know the names of the test case
arguments. Test cases cannot not have named arguments.But Keywords can.
And for the error, Error: No "Test Template" keyword found for first test case. It might be because the Test template <keyword_name> you have defined did not match the <keyword_name> defined in the *** Keywords *** section.
And Also note this, which again is as per doc
The keyword which is used as Test Template must be defined within the
test suite (in the same *.robot file). If the keyword which is used as
Test Template is defined in a Resource the DataDriver has no access to
its arguments names.

Unable to run shell script from test case

I'm trying to invoke a shell scrip from within a .robot test case.
The .sh file is in the same folder as the .robot file
*** Settings ***
Library Process
*** Test cases ***
Run the shell script
Start Process ./getIDfromDB.sh shell=yes
I'm getting the error:
Setting variable 'Start Process ./getIDfromDB.sh' failed: Invalid variable name 'Start Process ./getIDfromDB.sh'.
Running on Ubuntu
Researched documentation for Robot framework but could not find a solution. Maybe digging in the wrong spot.
I'm not sure how you are trying to set the path of the shell script in the robot file. The error message seems to convey that something is wrong with the way you're initialising the variable to hold the path.
The following code should work:
*** Settings ***
Library Process
*** Variables ***
${pathToScript} ./getIDfromDB.sh
*** Test cases ***
Run shell script
${output} Run process ${pathToScript} shell=yes
The return code and the output displayed in the terminal are stored in the ${output} variable. You can access the details as ${output.rc} and ${output.stdout} respectively.
You can find more details about the result object here.
According error details the keyword is not recognized, I think, you need add extra spaces after keyword name:
Start Process ./getIDfromDB.sh shell=yes

Import Library into Robot Test

I want to import library SeleniumLibrary into Robot test file but resulted not found. What could be the error?
I have installed SeleniumLibrary into C:\Python27\Lib\site-packages and set the environment variables. I"m using python 2.7.9
*** Settings ***
Documentation This is a simple test for Robot Framework
Library SeleniumLibrary
#Set Selenium Speed 2 seconds
*** Variables ***
#${homepage} http://www.amazon.com
#${chrome_browser} Chrome
*** Test Cases ***
Test title "Amazon"
[Tags] DEBUG
Open Browser http://www.amazon.com chrome
[Teardown] Close Browser
*** Keywords ***
Please help. Thanks.
Your SeleniumLibrary looks perfectly fine, the problem is the way you are calling the KW.
The error you are getting here because of below line
Open Browser http://www.amazon.com chrome
There should be two or four spaces between Keywords and Arguments and Arguments and ... , otherwise it will treat whole line as KW , which never going to exist
so change it like this
Open Browser http://www.amazon.com chrome
if it still throw an error, paste it here.
Solve by using four spaces between keywords and argument and argument.

Pycharm : [Errno 10054]

I try to Run a simple robot framework script in PyCharm.Here is my code:
*** Settings ***
Documentation This is some basic info about the whole suite
Library Selenium2Library
*** Variables ***
*** Test Cases ***
User must sign in to check out
[Documentation] This is some basic info about the test
[Tags] Smoke
Open Browser http://www.google.com.ua chrome
Close Browser
I customized robot framework with PyCharm as it was in videos but when I run this script in terminal of PyCharm, the desired site isn't opened and I get the next information:
C:\Users\user\PycharmProjects\amazon>
C:\Users\user\PycharmProjects\amazon>pybot -d results tests/Amazon.robot
Amazon :: This is some basic info about the whole suite
[ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open
User must sign in to check out :: This is some basic info about th... | FAIL |
error: [Errno 10054]
------------------------------------------------------------------------------
Amazon :: This is some basic info about the whole suite | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Output: C:\Users\user\PycharmProjects\amazon\results\output.xml
Log: C:\Users\user\PycharmProjects\amazon\results\log.html
Report: C:\Users\user\PycharmProjects\amazon\results\report.html
Tell me, please, why this script doesn't open the browser and actions that it should execute and why do I get this error. Thank you.
If the code you posted is literally your code, you're missing at least one space before chrome on the open browser line. There must be two or more spaces between the URL and the browser.
This may not be the only problem, but it's definitely a problem.

What is the correct way to specify 'WITH NAME' to access multiple robotframework Remote servers from a single test case?

According to the documentation at http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#remote-library-interface it is very straightforward. So I tried what is described there:
*** Settings ***
Library Remote http://${ADDRESS}:${PORT} WITH NAME LinuxHost
Library Remote http://${ADDRESS}:${PORT} WITH NAME WindowsHost
*** Variables ***
${ADDRESS} 127.0.0.1
${PORT} 8270
*** Test Cases ***
Example
WindowsHost.Start Process /bin/sleep 60
LinuxHost.Start Process /bin/sleep 60
LinuxHost.Run Process /bin/sleep 20
This fails with
Error in file 'processtest.txt': Test Library 'Remote' expected 0 to 1 arguments, got 2.
I'm running the python remote server like this:
from robot.libraries import Process
r=robotremoteserver.RobotRemoteServer(Process.Process(),'0.0.0.0')
When I just have one library without 'WITH NAME' keyword it works fine. This is robotserver 2.8.5.
This is the opposite question from Multiple remote libraries with robot framework.
You don't have enough spaces between WITH NAME and the name that follows. You need two or more spaces so that WITH NAME is in a column by itself.
Robot looks for the literal words WITH NAME -- and only those words -- within a cell. Since you don't have enough spaces separating it from the next cell, robot thinks this is just another argument to the remote library.
From the documentation (emphasis mine):
The basic syntax for specifying the new name is having the text WITH NAME (case-insensitive) after the library name and then having the new name in the next cell

Resources