1

Safari 브라우저 11.0.1에서 자동 완성 텍스트 필드 (Kendo UI)에 sendKeys/clear가 사용될 때 Selenium-Ruby에서 자동화 테스트를 코딩하는 동안Selenium send Kayys 및 clear는 Safari의 검도 자동 완성 필드에서 작동하지 않습니다. 11

시험 코드 :

actions.push(is_element_enabled?(PROF_IN_CHARGE,'PROF_IN_CHARGE')) 
actions.push(is_element_displayed?(PROF_IN_CHARGE,'PROF_IN_CHARGE')) 
actions.push(type(PROF_IN_CHARGE,first_name, 'PROF_IN_CHARGE')) 

셀레늄 방법 :

def is_element_enabled?(locator, name, raise_exception = true) 
$logger.info "Verify whether #{name} is enabled." 
highlight(web_driver.find_element(locator)) 
web_driver.find_element(locator).enabled? 
$logger.info "Element enabled: #{name}" 

def is_element_displayed?(locator, name, raise_exception = true, log_error = true) 
$logger.info(__method__) { "Verifying element #{name}" } 
$logger.debug(__method__) { locator } 
web_driver.find_element(locator).displayed? 
highlight(web_driver.find_element(locator), 0, "red") 
return true 

def type(locator, text, name, raise_exception = true) 
$logger.info(__method__) { "Typing #{text} to #{name}" } 
$logger.debug(__method__) { locator } 
highlight(web_driver.find_element(locator), 0, "red") 
#Clear existing text before typing 
web_driver.find_element(locator).clear 
web_driver.find_element(locator).send_keys(text) 

다음과 같은 오류가 표시됩니다

,
# --- Caused by: --- 
# Selenium::WebDriver::Error::ElementNotVisibleError: 
# An element command could not be completed because the element is not visible on the page. 
# /Users/admin/.rvm/gems/ruby-2.4.1/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/remote/response.rb:71:in `assert_ok' 

여기 로그입니다 :

I, [2017-12-11T15:19:00.611929 #5324] INFO -- : Verify whether PROF_IN_CHARGE is enabled. 
I, [2017-12-11T15:19:00.635876 #5324] INFO -- : Element enabled: PROF_IN_CHARGE 
I, [2017-12-11T15:19:00.635940 #5324] INFO -- is_element_displayed?: Verifying element PROF_IN_CHARGE 
D, [2017-12-11T15:19:00.635964 #5324] DEBUG -- is_element_displayed?: {:id=>"fcCreateMainAssingee"} 
I, [2017-12-11T15:19:00.647651 #5324] INFO -- is_element_displayed?: true 
I, [2017-12-11T15:19:00.660760 #5324] INFO -- type: Typing Report to PROF_IN_CHARGE 
D, [2017-12-11T15:19:00.660834 #5324] DEBUG -- type: {:id=>"fcCreateMainAssingee"} 
E, [2017-12-11T15:19:00.685450 #5324] ERROR -- create_new_matter: failed. 
I, [2017-12-11T15:19:00.725482 #5324] INFO -- screenshot: Screenshot saved in path: /Users/admin/PivotQA/screenshots/2017-12-11_1 
5_18_15/MattersLib_create_new_matter_20171211_151900.png 
E, [2017-12-11T15:19:00.725531 #5324] ERROR -- : An element command could not be completed because the element is not visible on t 
he page. 

이 후에도 성공적 요소는 셀레늄의 활성화를 사용하여 활성화 및 표시 여부를 확인됩니까? 표시됩니까? 행동 양식.

하지만 Chrome, IE 및 Edge와 같은 다른 브라우저에서는이 문제가 발생하지 않습니다.

javascript ("document.getElementById ('fcCreateMainAssingee'.value ='text ')")를 사용하여 해당 텍스트 필드의 값을 변경했지만 제대로 작동했지만 동적 옵션 드롭 다운이 표시되지 않았습니다. 문제.

그래서 비슷한 문제가 있고 해결 된 사람이 있습니까? 당신의 도움을 얻으려면 대단 하시겠습니까?

또한이를 수행 할 수있는 다른 방법이 있다면 제안 해주십시오.

여기에 자동 완성 필드의 DOM는 다음과 같습니다

<input formcontrolname="fcCreateMainAssingee" id="fcCreateMainAssingee" type="text" class="ng-untouched ng-pristine ng-valid k-input" data-role="autocomplete" placeholder="Username" autocomplete="off" role="textbox" aria-haspopup="true" aria-disabled="false" aria-readonly="false" aria-owns="fcCreateMainAssingee_listbox" aria-autocomplete="list" style="width: 100%;"> 

감사합니다!

+1

[ElementNotVisibleException : Selenium Python] 가능한 복제본 (https://stackoverflow.com/questions/47108512/elementnotvisibleexception-selenium-python) – DebanjanB

+0

제안 해 주신 데 감사드립니다. 가시성에 대해 언급하는 것을 잊어 버렸습니다. 실제로 로그를 살펴 본다면, 실제로 활성화 된 것을 모두 사용 했습니까? 표시됩니까? 행동 양식. 둘 다 엘리먼트의 존재를 확인했다. 그러나 여전히 메서드를 시작했을 때 오류가 발생했습니다. –

+0

글쎄, ** ** enabled ** ** 및 **'displayed ** ** '와 같이,'webelement'는 ** '다루기 힘들다'** 필요가있다. ** 그래서 우리는 ** element_to_be_clickable * * – DebanjanB

답변

0

검도 자동 완성 필드에 대한 연구 중에이 문제를 해결하는 데 도움이되는 JavaScript 코드를 발견했습니다.

다음은 셀렌 기능에 대한 신뢰할 수있는 대안이며 Safari, Chrome, IE 및 Edge 브라우저에서 철저히 테스트되었으며 정상적으로 작동합니다.

희망은 지난 며칠 동안 같은 배를 타는 사람에게 도움이되기를 바랍니다.

"document.getElementById('<ID>').value='<search_string>'" 

후 발생하는 검색을 트리거 다음

및 (기존 자리 문자열을 제거 SEARCH_STRING에서 JS 유형과 같은 텍스트를 취소 할 필요가 없습니다) -

여기 send_keys에 대한 JS의 셀레늄 상당의 를 입력하면 아래 js :

"$(#{locator[:id]}).data('kendoAutoComplete').search();" 

위의 js가 검색을 트리거하고 동적 드롭 다운이 열립니다.이제, (아래)를 사용하여 JS

js_script = 'arguments[0].click();' 
element = web_driver.find_element(locator) 
web_driver.execute_script(js_script, element) 

여기에 완벽한 방법입니다 셀레늄의 find_element 방법을 사용하여 XPath에 의해 그 요소를 발견하고 그것을 클릭의 그것의 단지 문제 : 아직도 경우,

def kendo_auto_complete(locator, loc_name, full_name, raise_exception = true) 
    $logger.info(__method__) { 'begin' } 
    # Split full name (Last_name, first_name) and get first_name 
    first_name = full_name.split(",").last.strip 
    # Type in the name using JS 
    $logger.info(__method__) { "Typing #{first_name} into #{loc_name}" } 
    web_driver.execute_script("document.getElementById('#{locator[:id]}').value='#{first_name}'") 
    short_delay 
    #Trigger search using JS 
    $logger.info(__method__) { "Starting search.." } 
    if BROWSER.upcase == 'IE' 
     web_driver.execute_script("$('##{locator[:id]}').data('kendoAutoComplete').search();") 
    else 
     web_driver.execute_script("$(#{locator[:id]}).data('kendoAutoComplete').search();") 
    end 
    # Select the name from results in dynamic dropdown 
    wait_for_element(create_dynamic_xpath(AUTO_CMP_OPTION[:xpath],full_name), full_name) 
    js_click(create_dynamic_xpath(AUTO_CMP_OPTION[:xpath],full_name), full_name) 
    $logger.info(__method__) { 'end' } 
rescue StandardError => e 
    $logger.error "Value of Kendo autocomplete - #{name} could not be set." 
    raise e if raise_exception 
    false 
end 

하지만를 누군가는 일을하는 더 좋은 방법을 가지고 있으며 여기에 친절하게 의견을 말합니다. 감사!