웹페이지가 화면요소가 없는 경웁checkbox 클릭오류 수정
This commit is contained in:
@@ -8,6 +8,7 @@ using WebDriverManager;
|
||||
using WebDriverManager.DriverConfigs.Impl;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
namespace BokBonCheck
|
||||
{
|
||||
@@ -18,29 +19,32 @@ namespace BokBonCheck
|
||||
SiteName = "남구통합도서관(문화정보도서관)"; // 문화관 검색기
|
||||
}
|
||||
|
||||
protected override void SelectLibrary(WebDriverWait wait)
|
||||
protected override bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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";
|
||||
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
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,29 +55,32 @@ namespace BokBonCheck
|
||||
SiteName = "남구통합도서관(푸른길도서관)";
|
||||
}
|
||||
|
||||
protected override void SelectLibrary(WebDriverWait wait)
|
||||
protected override bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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";
|
||||
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
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -84,29 +91,35 @@ namespace BokBonCheck
|
||||
SiteName = "남구통합도서관(청소년도서관)";
|
||||
}
|
||||
|
||||
protected override void SelectLibrary(WebDriverWait wait)
|
||||
protected override bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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";
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,29 +130,34 @@ namespace BokBonCheck
|
||||
SiteName = "남구통합도서관(효천어울림도서관)";
|
||||
}
|
||||
|
||||
protected override void SelectLibrary(WebDriverWait wait)
|
||||
|
||||
protected override bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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";
|
||||
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
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -150,29 +168,33 @@ namespace BokBonCheck
|
||||
SiteName = "남구통합도서관(스마트도서관)";
|
||||
}
|
||||
|
||||
protected override void SelectLibrary(WebDriverWait wait)
|
||||
protected override bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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";
|
||||
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
|
||||
{
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -238,22 +260,62 @@ namespace BokBonCheck
|
||||
}
|
||||
|
||||
|
||||
virtual protected void SelectLibrary(WebDriverWait wait)
|
||||
virtual protected bool SelectLibrary(WebDriverWait wait)
|
||||
{
|
||||
IWebElement searchBox = null;
|
||||
try
|
||||
{
|
||||
var selector = "#clickAll";
|
||||
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
|
||||
{
|
||||
|
||||
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;
|
||||
@@ -453,6 +521,7 @@ namespace BokBonCheck
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 페이지 변경을 감지하는 메서드
|
||||
public async Task WaitForPageChange(WebDriverWait wait)
|
||||
|
||||
Reference in New Issue
Block a user