SELENIUM DRIVER UNTUK APLIKASI WINFORMS
Kontribusi apa pun disambut :)
Proyek ini menggunakan
Mengapa pengemudi lain, ketika sudah ada https://github.com/microsoft/winappdriver? Aplikasi yang saya uji cukup besar dengan banyak elemen, dan pengemudi itu menghitung waktu setelah 60 detik pada beberapa kueri XPath (lihat masalah ini), dan setelah menyatukan semuanya, kueri selesai di bawah 2 detik.
Proyek ini bergantung pada otomatisasi MS UI yang merupakan bagian dari API aksesibilitas Windows.
Dokumentasi resmi menyebutkan dukungan untuk berbagai platform:
Otomasi UI didukung pada sistem operasi berikut: Windows XP, Windows Server 2003, Windows Server 2003 R2, Windows Vista, Windows 7, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, dan Windows Server 2019.
Saya tidak dapat mengkonfirmasi itu akan bekerja pada platform tersebut karena saya hanya memiliki 10 perusahaan di mesin saya, tetapi semua perpustakaan yang diperlukan adalah bagian dari proyek.
Sejauh yang saya tahu mode pengembang tidak diperlukan.
Saat ini, tidak ada penginstal. Kloning repositori dan bangun yang dapat dieksekusi dari sumber. Gunakan yang dapat dieksekusi yang ditemukan di bawah WinAppDriver.ServerbinDebugWinAppDriver.Server.exe
Versi driver klien terbaru 3.141.0.0 harus digunakan saat menelepon server.
Ok dan Yes , teks tambahan dapat ditambahkan dengan mengatur kemampuan acceptAlertButtonCaptions kemampuan yang terpisah koma dengan daftar nilai yang dipisahkan koma Cancel dan No , teks tambahan dapat ditambahkan dengan mengatur dismissAlertButtonCaptions kemampuan dengan daftar nilai yang dipisahkan titik koma Perintah Selenium yang Tidak Didukung
Dukungan XPath:
//node[3] //node[@attribute = 'X'] Hanya perintah appium ini yang diimplementasikan
Tambahkan referensi ke Selenium.WebDriver v3.141.0 (https://www.nuget.org/packages/selenium.webdriver/3.141.0) dan Anda siap untuk pergi.
Driver dapat memulai sistem di bawah proses pengujian atau melekat pada proses berjalan. Gunakan kemampuan untuk menentukan proses untuk melampirkan.
Ketika tidak ada argumen baris perintah disediakan, server akan diluncurkan di alamat IP default http://127.0.0.1:4444 .
Kemampuan berikut didukung:
mode - start (nilai default) atau attachprocessId - ID dari proses untuk dilampirkanprocessName - Nama proses untuk dilampirkanexePath atau app - jalur ke executable untuk memulai proses (argumen tidak dapat disediakan saat ini)appWorkingDir - Tetapkan direktori kerja proses barumainWindowTitle - Ekspresi reguler untuk membantu WinAppdriver mempersempit proses untuk dilampirkansendKeyStrategy ( oneByOne | grouped | setValue ) - Strategi untuk digunakan untuk mengetik teks ke dalam bidang teks, nilai default adalah oneByOne , saat ini kemampuan ini tidak dapat diubah selama sesi public static RemoteWebDriver CreateSessionByStartingTheApplication()
{
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("app", "<name of the program to start>");
// or "exePath" desktopCapabilities.SetCapability("exePath", "<path to the executable to start the process>");
// following capabilities should be provided for UWP applications like Calculator or Clocks & Alarms
// optional - to set the working directory
desktopCapabilities.SetCapability("appWorkingDir", "<path to run the process in>");
// optional - to identify the process
desktopCapabilities.SetCapability("processName", "<name of the process>");
// optional - to identify the main window
desktopCapabilities.SetCapability("mainWindowTitle", "<name of the process>");
return new RemoteWebDriver(
new CommandExec(new Uri("http://127.0.0.1:4444"),
TimeSpan.FromSeconds(60)),
desktopCapabilities);
}
public static RemoteWebDriver CreateSessionByAttachingToRunningProcess()
{
DesiredCapabilities desktopCapabilities = new DesiredCapabilities();
desktopCapabilities.SetCapability("mode", "attach");
// attach to process using process name
desktopCapabilities.SetCapability("processName", "<name of the process to attach to>");
// with (optional)
desktopCapabilities.SetCapability("windowTitle", "<regular expression to narrow down the list of matching processes>");
// or attach to process using process id
desktopCapabilities.SetCapability("processId", "<id of the process to attach to>");
return new RemoteWebDriver(
new CommandExec(new Uri("http://127.0.0.1:4444"),
TimeSpan.FromSeconds(60)),
desktopCapabilities);
}
Lokasi elemen yang disarankan menggunakan ekspresi xpath (meskipun dengan dukungan ekspresi terbatas)
var webBrowser = session.FindElement(By.XPath("//Pane[@AutomationId='webBrowser']"));
Mekanisme lokasi elemen yang didukung
TextBox#id Windows di aplikasi WIN tidak seperti Windows di browser. Windows ( ControlType.Window ) dapat bersarang di dalam pohon kontrol, misalnya dalam elemen Tab .
Jendela dapat ditempatkan menggunakan ekspresi xpath var window = session.FindElement(By.XPath("/Window/Pane/Window[@AutomationId='WindowName']")); atau dengan beralih ke TI session.SwitchTo().Window("WindowName"); , dalam contoh pertama Anda akan mendapatkan referensi elemen, di yang lain konteks internal dialihkan ke jendela dan elemen baru di -cache selama operasi berikut dapat dibuang ketika jendela disempel session.Close() .
Perhatikan bahwa pembungkus elemen seperti OpenQA.Selenium.Support.UI.SelectElement tidak berfungsi karena elemen select dan option secara internal diharapkan.
Ada peretasan yang cukup jelek yang memotong kebutuhan untuk mengganti jendela saat mencari jendela anak menggunakan ekspresi xpath. Secara default, pencarian dimulai pada elemen root jendela - jendela utama atau jendela yang dialihkan pengguna - dan pencarian jendela anak gagal karena itu bukan anak langsung dari akar saat ini. Perbaikan memulai pencarian jendela di level atas.