Alle Beiträge von mic91668

Mailingliste erstellen

Im Folgenden ein Weg, wie bei einem Massenmailing

  1. ein Empfänger die anderen Empfängern nicht sieht UND
  2. seine E-Mail-Adresse im To-Feld steht UND
  3. er per individueller Anrede angesprochen wird

Mit WordPress The Newsletter Plugin scheint das doch sehr umständlich

Default Liste zu eigenständigen Liste machen

Eigenständige Liste erstellen (page=newsletter_subscription_lists)
Bulk Action: alle bestehenden Mitglieder in eigenständige Liste umziehen
Neue Mitglieder der eigenständigen Liste automatisch zuweisen
Neue Newsletter auf die eigenständige Liste zuweisen

Separate Liste erstellen

  1. Separate Liste erstellen (page=newsletter_subscription_lists)
  2. csv-Import mit den Einstellungen:
    • als unbestätigt importieren, aber nicht überschreiben
    • Update bei Art des Imports wählen
    • Separate Liste auswählen

Besser: Thunderbird mit Plugin Mail Merge

Variablen werden mit {{}} umschlossen und benannt (case-sensitive) nach der entsprechenden Spalte aus der .csv. Sie sind sowohl im An:, CC:, BCC:, Betreff und Textbody verwendbar.

Die Anrede Liebe Frau Meier/Lieber Herr Müller kann man sich (die Geschlechterspalte sei mit Gender überschrieben die Werte nähme m und w an) mit folgender Syntax erzeugen:

{{Gender|m|Lieber Herr|Liebe Frau}} {{Lastname}},

… hierzu der entsprechende Auszug aus der Doku:

Sicherheitshalber Später senden auswählen -> bei mir befindet sich der Postausgang seltsamerweise im Archiv-Ordner. Dort besonders auf die Anrede und korrekte Umlaute achten. Wenn alles ok, kann man mit Nachrichten jetzt senden den Sack zumachen.

RanoreXPath versus XPath

Der RanoreXPath folgt den gleichen syntaktischen Regeln wie der XPath. Folgende Unterschiede gibt es jedoch:

Die erste Achse des RanorexPath’s beginnt mit /forms oder /dom, was es bei XPath’s nicht gibt. Standardmäßig beginnt der RanoreXPath mit /dom, wenn Webelemente selektiert werden sollen. Werden Elemente in einer desktop-Anwendung selektiert, ist die erste Achse des RanoreXPath /forms

Repository items repräsentieren in Ranorex die Elemente mit denen bei der Ausführung der automatischen Tests interagiert (also beispielsweise geklickt, Text ausgelesen und validiert, usw. wird). Mit dem repository item wird der RanoreXPath, ein Timeout, optional ein Screenshot und optional ein Kommentar gespeichert. Repositoryitems sind in einer hierarchischen Struktur von ein oder mehreren übereinander geordneten foldern gespeichert. Jeder dieser folder kann einen Teilpfad enthalten, den sogenannten Base Path (Quelle). Jedes item setzt sich also aus seinem Teilpfad und den Teilpfaden seiner übergeordneten folder zusammen. Solch einen zusammengesetzten Pfad kennen die meisten anderen Testautomatisierungsframeworks nicht.

Ein Text wird in XPath mit text() selektiert, in RanoreXPath jedoch mit @innertext. Wenn anhand eines Teils eines Textes ein Element selektiert werden soll, wird in XPath die contains()-Funktion genutzt – in RanoreXPath kann kein contains() verwendet werden! Stattdessen verwendet RanoreXPath reguläre Ausdrücke (Regex), die durch eine Tilde (~) symbolisiert werden (Quelle). Beispiel: Der XPath //div[contains(@name,’michael‘)] würde in RanoreXPath also so aussehen: /dom//div[@name~’michael‘)]. Kann das @name-Attribut des div groß und klein geschrieben werden, kann man in RanoreXPath also Regex einsetzen: /dom//div[@name~'(m|M)ichael‘)]

Im RanoreXPath kann man @id= abkürzen, indem man ein # nutzt. Wenn der XPath so aussehen würde: //div[@id=’mySearch‘] , würde der entsprechende RanorexPath kann also so aussehen: /dom//div[#’mySearch‘]. Damit man den Pfad aber sowohl als RanoreXPath als auch als XPath nutzen kann, sollte man darauf aber verzichten.

In XPath wird das letze Element mit last() angesprochen, in RanoreXPath wird das durch [-1] erreicht. (darüberhinausgehende Quelle der Unterschiede zwischen RanorexPath und XPath)

Verneinung eines Attributes geht in XPath mit not(@type=’hidden‘) in RanorexPath hingegen gibt’s kein not(), dort macht man das so: @type!=’hidden‘. Beispiel in XPath: //div[not(@id=’falscheID‘)] – das entsprechende Beispiel in RanoreXPath lautet /dom//div[@id!=’falscheID‘]

In XPath kann man die Existenz eines Attributs, also beispielsweise des title-Attributs einfach durch @title überprüfen (Quelle), in RanoreXPath muss man das so machen: @title!=null() -> die Klammern hinter null braucht es tatsächlich. Letzteres funktioniert in XPath nicht.

In XPath kann man die Nicht-Existenz eines Attributes, z.B. des title-Attributes einfach durch not(@title) überprüfen, z.B. //div[not(@class)] selektiert alle div auf einer Webseite, die kein class-Attribut haben. In RanoreXPath ist das ziemlich uneinheitlich (im Ranorex-Forum bestätigt der Support zumindest, dass das einmal zwischen verschiedenen Browsern uneinheitlich war (Quelle)). In Edge habe ich mir mühsam Schritt-für-Schritt erarbeitet, welcher RanoreXPath das wie macht:

AttributRanoreXPath zum Selektieren eines Elements ohne das Attribut
Zugelassene Attribute eines divs (Quelle)
id@id=null()
class@class=null()
lang@lang=null()
title@title=null()
stylekeinen RanoreXPath gefunden, der das kann.
align@align=null()
onclick@onclick=null()
Phantasie-Attribute
hubba-bubba@hubba-bubba=null()
Web-Element Attribute
tagValue@tagValue=null()
innertext@innertext=“
ContentEditable@ContentEditable=null()
ContextMenue@ContextMenue=null()

In RanoreXPath verwenden Sie etwas wie /dom[@page=’FlexExample.html‘], um den Browsertab, also den kleinen rechteckigen Reiter, der auf dem Viewport sitzt, zu selektieren. In Selenium XPath können Sie den Browsertab nicht auswählen, da er außerhalb des Viewports liegt.

Case-sensitivity abschalten: in RanoreXPath mit Regex (Quelle) – in XPath mit Translate()

Um das x-te Element zu selektieren verwendet man in RanoreXPath: /dom[@domain~’mydomain‘]//div[@class=’header‘][2] und in XPath: (.//div[@class=’header‘])[2]

Um svg-Elemente zu selektieren verwendet man in RanoreXPath so etwas: /dom[@domain~’mydomain‘]//tag[@TagName=’rect‘][13] und in XPath so etwas: (//*[local-name()=’rect‘])[13]

Strings dürfen in RanoreXPath nur in einfachen Anführungszeichen verwendet werden und in XPath können sowohl einfache, als auch doppelte Anführungszeichen verwendet werden. Damit man den Pfad sowohl als RanoreXPath als auch als XPath nutzen kann, sollte man für die Strings einfache Anführungszeichen nutzen.

In RanoreXPath kann man die Frage nach der Sichtbarkeit einbauen (was in Selenium nicht über XPath geht), z.B.: //table[@visible=’true‘]. Dies ist nützlich, weil in manchen Frameworks zwei optisch gleiche Elemente mit der gleichen ID existieren, die sich jedoch in ihren Zuständen unterscheiden. Das eine Element ist sichtbar und das andere nicht, je nachdem welcher Zustand gerade herrscht.

Und/Oder:

  • XPath: .//*[@TagName=’input‘ or @TagName=’select‘ or @TagName=’textarea‘]
  • RanoreXPath: .//*[self::input or self::select or self::textarea]

Im Zusammenhang mit den Pfaden stehend

Falls mehrere Elemente bei einem Pfad matchen, wird bei Selenium immer das erste im DOM zurückgegeben – bei Ranorex entscheidet darüber ein Algorithmus, welches zurückgegeben wird.

In Ranorex wird der innere Text eines bestimmten Elements zurückgegeben. In Selenium wird der konkatenierte Text aller abhängigen Elemente zurückgegeben