Archiv der Kategorie: Testautomatisierung

Use custom C#-libraries in Robot Framework

Read Install Robot Framework with IronPython on Windows and Use .NET libraries in Robot Framework first.
1. Save the Robot Framework file as ExampleTestCase.txt in C:\Program Files (x86)\robotframework-2.9\src\bin:

*** Settings ***
Library     FileManager
*** Test Cases ***
My Test
    Create File    fantastic.txt

2. Save the „middle-tier“ Python script as FileManager.py in C:\Program Files (x86)\robotframework-2.9\src\bin:

import clr
clr.AddReferenceToFileAndPath("C:/Program Files (x86)/robotframework-2.9/src/bin/FileCreator.dll")
import FileCreator
class FileManager:
    def create_file(self, fileName):
        FileCreator().CreateFile(fileName)

Note, that in Python an object is created with brackets: FileCreator()
Note, that Robot Framework automatically matches the keyword „Create File“ in ExampleTestCase.txt with „create_file“ in FileCreator.py
3. Save your custom C# file as FileCreator.cs in C:\Program Files (x86)\robotframework-2.9\src\bin:

using System;
public class FileCreator
{
    public void CreateFile(String fileName)
    {
        System.IO.File.Create(fileName);
    }
}

4. Compile FileCreator.cs with csc in Command Prompt:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /t:library /out:FileCreator.dll "C:\Program Files (x86)\robotframework-2.9\src\bin\FileCreator.cs"

5. Run the test in Command Prompt with:

ipybot ExampleTestCase.txt

XPath Expressions with Javascript

Gute Einführung ins Thema von Mozilla Developper Network

Always if you have severe troubles with Selenium, you can reach your test-automation goal with JavaScript (JavascriptExecutor). To use your XPaths for locating an element, your choice is document.evaluate(). The handling of this function is somewhat nasty.
Evaluate() returns the XPathResult-object. The evaluate()-method has five parameters, but concentrate on the first and fourth parameter and treat the rest as fixed. Here’s an example:

let myXPathResult = document.evaluate( 'count(//div)', document, null, XPathResult.ANY_TYPE, null);

If you choose the generic XPathResult.ANY_TYPE, the XPath-expression: count(//div) itself determines the return type. So in this example the return type is XPathResult.NUMBER_TYPE
The return type is important for the further processing of the value.

String auslesen

If you like to return the string-value of a nodeset, then you need to choose XPathResult.STRING_TYPE:
Go to www.it-kosmopolit.de and press F12 to open developer tools. In the Console enter:

var myXPathResult = document.evaluate( './/h1', document, null, XPathResult.STRING_TYPE, null);
alert(myXPathResult.stringValue);
XPath-Javascript1

Elemente zählen

If you want to process with the result of counting the div’s, you execute this JavaScript:

let xpathOfElementsToCount = '//div';
let countStatement = 'count(' + xpathOfElementsToCount + ')';
let numberOfelements = document.evaluate( countStatement, document, null, XPathResult.ANY_TYPE, null).numberValue;
alert(numberOfelements);
XPath-Javascript2

Unfortunately this function is not implemented in Internet Explorer until now.

Getting back an element-node

Alternative 1

let xpath = ".//a[@class='myClass']";
let myNodeSet = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
myNodeSet.remove() // entfernt das Element

Note: .singleNodeValue only works with returnType ANY_UNORDERED_NODE_TYPE or FIRST_ORDERED_NODE_TYPE (XPathResult.singleNodeValue – Web APIs | MDN (mozilla.org))

Alternative 2

To be done

Allgemeines zu XPathResult

Snapshots also return element nodesets, but they freeze the state of the nodeset at the moment of call.

Strategic link collection of Robot Framework

Do you need a good overview of all important websites regarding Robot Framework? Find my strategic link collection here:
Good introduction and overview on wikipedia: https://en.wikipedia.org/wiki/Robot_Framework
Quick start: https://github.com/robotframework/QuickStartGuide/blob/master/QuickStart.rst
 
My general considerations on robot Framework: https://it-kosmopolit.de/robot-framework-is-a-programming-language/
Install Robot Framework with IronPython on Windows: https://it-kosmopolit.de/install-robot-framework-with-ironpython-on-windows/
Use .NET libraries in Robot Framework: https://it-kosmopolit.de/use-net-libraries-in-robot-framework/
 
RIDE (Robot Framework IDE/development environment): https://github.com/robotframework/RIDE
User guide/tutorial with a lot of content: http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
Ask you questions here: http://stackoverflow.com/questions/tagged/robotframework?sort=newest&pageSize=30
Installation instructions: https://github.com/robotframework/robotframework/blob/master/INSTALL.rst
The source code (repostiory) on gitHub: https://github.com/robotframework/robotframework