웹페이지가 화면요소가 없는 경웁checkbox 클릭오류 수정
This commit is contained in:
@@ -8,6 +8,7 @@ using WebDriverManager;
|
|||||||
using WebDriverManager.DriverConfigs.Impl;
|
using WebDriverManager.DriverConfigs.Impl;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace BokBonCheck
|
namespace BokBonCheck
|
||||||
{
|
{
|
||||||
@@ -18,29 +19,32 @@ namespace BokBonCheck
|
|||||||
SiteName = "남구통합도서관(문화정보도서관)"; // 문화관 검색기
|
SiteName = "남구통합도서관(문화정보도서관)"; // 문화관 검색기
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SelectLibrary(WebDriverWait wait)
|
protected override bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == true)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == true)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 체크되어 있으면 클릭해서 해제
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
|
|
||||||
selector = "#libMA";
|
selector = "#libMA";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == false)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 문화관 체크박스 선택
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,29 +55,32 @@ namespace BokBonCheck
|
|||||||
SiteName = "남구통합도서관(푸른길도서관)";
|
SiteName = "남구통합도서관(푸른길도서관)";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SelectLibrary(WebDriverWait wait)
|
protected override bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == true)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == true)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 체크되어 있으면 클릭해서 해제
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
|
|
||||||
selector = "#libMB";
|
selector = "#libMB";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == false)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 체크박스 선택
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,30 +91,36 @@ namespace BokBonCheck
|
|||||||
SiteName = "남구통합도서관(청소년도서관)";
|
SiteName = "남구통합도서관(청소년도서관)";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SelectLibrary(WebDriverWait wait)
|
protected override bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == true)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == true)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 체크되어 있으면 클릭해서 해제
|
SafeClick(searchBox);
|
||||||
|
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
|
|
||||||
selector = "#libMC";
|
selector = "#libMC";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
{
|
if (searchBox.Selected == false)
|
||||||
searchBox.Click(); // 체크박스 선택
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
{
|
||||||
|
//searchBox.Click(); // 체크박스 선택
|
||||||
|
SafeClick(searchBox);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class NamguLibrarySearcher_Hyocheon : NamguLibrarySearcher
|
public class NamguLibrarySearcher_Hyocheon : NamguLibrarySearcher
|
||||||
@@ -117,29 +130,34 @@ namespace BokBonCheck
|
|||||||
SiteName = "남구통합도서관(효천어울림도서관)";
|
SiteName = "남구통합도서관(효천어울림도서관)";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SelectLibrary(WebDriverWait wait)
|
|
||||||
|
protected override bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == true)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == true)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 체크되어 있으면 클릭해서 해제
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
|
|
||||||
selector = "#libSW";
|
selector = "#libSW";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == false)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 체크박스 선택
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -150,29 +168,33 @@ namespace BokBonCheck
|
|||||||
SiteName = "남구통합도서관(스마트도서관)";
|
SiteName = "남구통합도서관(스마트도서관)";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void SelectLibrary(WebDriverWait wait)
|
protected override bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == true)
|
if (searchBox == null) return false;
|
||||||
|
if ( searchBox.Selected == true)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 체크되어 있으면 클릭해서 해제
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
else return;
|
|
||||||
|
|
||||||
selector = "#libSQ";
|
selector = "#libSQ";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == false)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 체크박스 선택
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,22 +260,62 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual protected void SelectLibrary(WebDriverWait wait)
|
virtual protected bool SelectLibrary(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var selector = "#clickAll";
|
var selector = "#clickAll";
|
||||||
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
searchBox = wait.Until(d => d.FindElement(By.CssSelector(selector)));
|
||||||
if (searchBox != null && searchBox.Selected == false)
|
if (searchBox == null) return false;
|
||||||
|
if (searchBox.Selected == false)
|
||||||
{
|
{
|
||||||
searchBox.Click(); // 전체체크박스가 해제되어 있으면 클릭해서 선택
|
SafeClick(searchBox);
|
||||||
}
|
}
|
||||||
else return;
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void SafeClick(IWebElement searchBox)
|
||||||
|
{
|
||||||
|
// 안정적인 클릭을 위한 여러 방법 시도
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 1. JavaScript로 클릭 시도
|
||||||
|
var driver = ((IWrapsDriver)searchBox).WrappedDriver;
|
||||||
|
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", searchBox);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 2. 요소가 보이도록 스크롤 후 클릭
|
||||||
|
var driver = ((IWrapsDriver)searchBox).WrappedDriver;
|
||||||
|
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", searchBox);
|
||||||
|
Thread.Sleep(500);
|
||||||
|
searchBox.Click();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 3. Actions 클래스 사용
|
||||||
|
var driver = ((IWrapsDriver)searchBox).WrappedDriver;
|
||||||
|
var actions = new OpenQA.Selenium.Interactions.Actions(driver);
|
||||||
|
actions.MoveToElement(searchBox).Click().Perform();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// 4. 마지막 방법: JavaScript로 직접 체크 해제
|
||||||
|
var driver = ((IWrapsDriver)searchBox).WrappedDriver;
|
||||||
|
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].checked = false;", searchBox);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,7 +347,13 @@ namespace BokBonCheck
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
//대상도서관 선택
|
//대상도서관 선택
|
||||||
SelectLibrary(wait);
|
if(SelectLibrary(wait)==false)
|
||||||
|
{
|
||||||
|
result.ErrorMessage = "도서관선택실패";
|
||||||
|
result.BookCount = -1;
|
||||||
|
result.IsSuccess = false;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// 검색창 찾기 (남구통합도서관 사이트의 특정 선택자 사용)
|
// 검색창 찾기 (남구통합도서관 사이트의 특정 선택자 사용)
|
||||||
IWebElement searchBox = null;
|
IWebElement searchBox = null;
|
||||||
@@ -454,6 +522,7 @@ namespace BokBonCheck
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 페이지 변경을 감지하는 메서드
|
// 페이지 변경을 감지하는 메서드
|
||||||
public async Task WaitForPageChange(WebDriverWait wait)
|
public async Task WaitForPageChange(WebDriverWait wait)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user