Statistics: Clicks for link of WordPress ‚The Newsletter Plugin‘

For me it’s very interesting to see, which are the top-performing articles, to recognize, which content my readers want. Because more and more people subscribe to my newsletters over the time, I need to compare the number of clicks on an article to the numbers of emails sent.

The following snippet works perfectly for me to get a good understanding about the content, however the report is pretty ugly. So, use the code as a base for your needs.

 

<?php
$servername = "yourIP";
$username = "yourDatabaseUser";
$password = "yourPassword";
$database = "yourDatabase";

$connection = new mysqli($servername, $username, $password, $database);

$sql = "SELECT email_id, COUNT(url) AS numberOfLinkClicks, url FROM wp_newsletter_stats w WHERE url <>'' GROUP BY url";
$result_article_counts = $connection->query($sql);

while($rowOuter = $result_article_counts->fetch_assoc()) {
	$sql = "SELECT id, sent FROM wp_newsletter_emails WHERE id = " . $rowOuter['email_id'];
	$result_newsletter_counts = $connection->query($sql);
	while($rowInner = $result_newsletter_counts->fetch_assoc()) {
		$numberOfSentEmails = $rowInner['sent'];
	}
	$link = $rowOuter['url'];
	$numberOfLinkClicks = $rowOuter['numberOfLinkClicks'];
	$click_rate = $numberOfLinkClicks / $numberOfSentEmails;
	if ($click_rate > 0.15) {
		$bold = "<b>"; 
	$bold2 = "</b>";
	} else {
		$bold =""; 
	$bold2 = "";
	}
	echo "Link: " . $link . " -> Clickrate: " . $bold . $click_rate . $bold2 . "<br>";
}
	
$connection->close();
?>

WinAppDriver: Beispiel zum Lokalisieren von Desktop-Elementen (mit Inspect und XPath)

Verwendung von Microsoft inspect (aus Windows SDK) zum Lokalisieren von Desktop-Elementen:
* refresh von inspect durchführen (siehe folgenden Screenshot) -> sonst landet das automatische Tracking nicht an der richtigen Stelle im Baum
* automatisches Tracking einschalten (siehe folgenden Screenshot)
* mit Mauszeiger auf das zu lokalisierende Element gehen
* gehe hoch zu root element des Fensters, da dieses einen eindeutigen Namen hat
* baue einen XPath zum
* leider fehlt dem inspect das feature zum Validieren des XPaths, so dass wir das erst beim Ausführen des entsprechenden Unittests in Visual Studio sehen können
 

C# Unittest beinhaltet den WinAppDriver-UI-Test:
(Voraussetzung ist natürlich ein laufender WinAppDriver-Server)
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Appium.Windows;
using System.Threading;
namespace UnitTestProject2
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void NotepadTest()
        {
            DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
            desiredCapabilities.SetCapability("app", @"C:\Windows\System32\notepad.exe");
            WindowsDriver<WindowsElement> session = new WindowsDriver<WindowsElement>(new Uri("http://localhost:4723"), desiredCapabilities);
            WindowsElement textFeld = session.FindElementByXPath("//*[contains(@Name,'Editor')]/child::*[1]");
            textFeld.SendKeys("Simon!");
            String textInTextFeld = textFeld.Text;
        }
    }
}

Anpacken!