1

Safariブラウザ11.0.1のオートコンプリートテキストフィールドでsendKeys/clearが使用されているときにSelenium-Rubyでオートメーションテストをコーディングしている間に、Selenium sendKeysと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

さて、**有効になって** ** **表示**されていることを除いて、 'webelement'は**難易度**である必要があります**私たちは** element_to_be_clickable * * – DebanjanB

答えて

0

剣道のオートコンプリートフィールドに関する私の研究の中で、私はこの問題を解決するのに役立つJavaScriptコードを見つけました。

以下は、セレン機能の信頼できる代替品であり、Safari、Chrome、IE、Edgeブラウザで完全にテストされており、正常に動作しています。

これは、私が過去数日間同じボートにいる誰かを助けることを願っています!

ここsend_keysのためのJSのセレン同等だ -

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

(SEARCH_STRINGにjsの種類としてテキストをクリアする必要が既存のプレースホルダ文字列を削除していない)

が、その後の後に起こる検索をトリガしますを入力すると、上記のjsが検索をトリガーして、動的ドロップダウンが開きます。

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 

しかし、まだの場合:さて、セレンのfind_elementメソッドを使用してのxpathことで、その要素を見つけ、その後、JS(下記の)

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

を使用してそれをクリックのそのだけの問題はここで完全な方法があります誰かが物事をする良い方法を持っているので、ここで親切にコメントしてください。ありがとう!

関連する問題