Skip to content

Commit

Permalink
Merge pull request #4 from kmaki565/webdriver-auto-update
Browse files Browse the repository at this point in the history
Support Edge browser and auto update webDriver
  • Loading branch information
kmaki565 authored Nov 22, 2021
2 parents e2d4ace + fa52b1e commit 00ff972
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 26 deletions.
16 changes: 14 additions & 2 deletions BentoEx/App.config
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="RequiresVpnOff" value="False"/>
<add key="RequiresVpnOff" value="False" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
43 changes: 39 additions & 4 deletions BentoEx/BentoEx.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,51 @@
<ApplicationIcon>Asset\egg1.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="AngleSharp, Version=0.16.1.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
<HintPath>..\packages\AngleSharp.0.16.1\lib\net461\AngleSharp.dll</HintPath>
</Reference>
<Reference Include="FontAwesome.WPF, Version=4.7.0.37774, Culture=neutral, PublicKeyToken=0758b07a11a4f466, processorArchitecture=MSIL">
<HintPath>..\packages\FontAwesome.WPF.4.7.0.9\lib\net40\FontAwesome.WPF.dll</HintPath>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.11.33.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.11.33\lib\Net45\HtmlAgilityPack.dll</HintPath>
<Reference Include="HtmlAgilityPack, Version=1.11.38.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.11.38\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=1.3.3.11, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.1.3.3\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.Management.Automation.dll.10.0.10586.0\lib\net40\System.Management.Automation.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Security.AccessControl, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
</Reference>
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encoding.CodePages, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encoding.CodePages.6.0.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
Expand All @@ -61,8 +93,11 @@
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WebDriver, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.WebDriver.3.141.0\lib\net45\WebDriver.dll</HintPath>
<Reference Include="WebDriver, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.WebDriver.4.0.1\lib\net46\WebDriver.dll</HintPath>
</Reference>
<Reference Include="WebDriverManager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WebDriverManager.2.12.2\lib\net46\WebDriverManager.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
Expand Down
50 changes: 40 additions & 10 deletions BentoEx/Model/BrowserAutomation.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
using Microsoft.Win32;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WebDriverManager;
using WebDriverManager.DriverConfigs.Impl;
using WebDriverManager.Helpers;

namespace BentoEx.Model
{
Expand All @@ -19,10 +24,30 @@ class BrowserAutomation
readonly string userId;
readonly string password;

/// <summary>
/// Initializes browser automation.
/// Throws exception if WebDriver failed to initialize (e.g., version mismatched to the installed browser).
/// </summary>
/// <param name="company"></param>
/// <param name="id"></param>
/// <param name="pw"></param>
public BrowserAutomation(string company, string id, string pw)
{
// I use Chrome
webDriver = new ChromeDriver();
// Use Chromium Edge, or Chrome.
if (EnvCheck.IsMsEdgeInstalled())
{
string webDriverPath = new DriverManager().SetUpDriver(new EdgeConfig(), VersionResolveStrategy.MatchingBrowser);
webDriver = new EdgeDriver(Path.GetDirectoryName(webDriverPath));
}
else if (EnvCheck.IsChromeInstalled())
{
string webDriverPath = new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser);
webDriver = new ChromeDriver(Path.GetDirectoryName(webDriverPath));
}
else
{
throw new InvalidOperationException("Chromium Edge or Chrome browser is required for UI automation.");
}

companyCode = company;
userId = id;
Expand Down Expand Up @@ -123,18 +148,23 @@ void Confirm()
}
}

class BrowserEnvCheck
static class EnvCheck
{
const string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe";

static public bool IsChromeInstalled()
public static bool IsChromeInstalled()
{
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keyPath, false);

return (regkey != null);
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe");
return regkey != null;
}
/// <summary>
/// Checks if Chromium version of Edge browser is installed.
/// </summary>
/// <returns></returns>
public static bool IsMsEdgeInstalled()
{
return File.Exists(@"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe");
}

static public bool IsVpnConnected()
public static bool IsVpnConnected()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
Expand Down
22 changes: 14 additions & 8 deletions BentoEx/ViewModel/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,13 @@ private async Task RunProcessNoWindow(string cmd, string arg)

public void OnLoaded()
{
NeedBrowserInstall = !BrowserEnvCheck.IsChromeInstalled();
var task = Update(LoadMenu(selectedDay));
NeedBrowserInstall = !EnvCheck.IsMsEdgeInstalled() && !EnvCheck.IsChromeInstalled();
_ = Update(LoadMenu(selectedDay));
}

private async Task LoadMenu(DateTime date)
{
NeedKillVpn = requireVpnOff && BrowserEnvCheck.IsVpnConnected();
NeedKillVpn = requireVpnOff && EnvCheck.IsVpnConnected();

if (!IsLoggedIn)
{
Expand Down Expand Up @@ -225,11 +225,17 @@ private async void SubmitOrderExecute()
if (CancelIfDuplicateOrder())
return;

var selenium = new BrowserAutomation(Pass.CompanyCode, Pass.UserId, Pass.Password);

await Update(selenium.OrderBentoes(Bentoes.Where(b => b.ToBeOrdered)));

await Update(LoadMenu(selectedDay));
try
{
var selenium = new BrowserAutomation(Pass.CompanyCode, Pass.UserId, Pass.Password);
await Update(selenium.OrderBentoes(Bentoes.Where(b => b.ToBeOrdered)));
await Update(LoadMenu(selectedDay));
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message, "BentoEx - Browser automation failed");
return;
}
}
private bool CanSubmitOrderExecute()
{
Expand Down
15 changes: 13 additions & 2 deletions BentoEx/packages.config
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AngleSharp" version="0.16.1" targetFramework="net461" />
<package id="FontAwesome.WPF" version="4.7.0.9" targetFramework="net461" />
<package id="HtmlAgilityPack" version="1.11.33" targetFramework="net461" />
<package id="Selenium.WebDriver" version="3.141.0" targetFramework="net461" />
<package id="HtmlAgilityPack" version="1.11.38" targetFramework="net461" />
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net461" />
<package id="Selenium.WebDriver" version="4.0.1" targetFramework="net461" />
<package id="Selenium.WebDriver.ChromeDriver" version="90.0.4430.2400" targetFramework="net461" />
<package id="SharpZipLib" version="1.3.3" targetFramework="net461" />
<package id="System.Buffers" version="4.5.1" targetFramework="net461" />
<package id="System.Management.Automation.dll" version="10.0.10586.0" targetFramework="net461" />
<package id="System.Memory" version="4.5.4" targetFramework="net461" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net461" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net461" />
<package id="System.Security.AccessControl" version="6.0.0" targetFramework="net461" />
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net461" />
<package id="System.Text.Encoding.CodePages" version="6.0.0" targetFramework="net461" />
<package id="WebDriverManager" version="2.12.2" targetFramework="net461" />
</packages>

0 comments on commit 00ff972

Please sign in to comment.