2017-07-25 66 views
0

我需要迭代組合框中的項目,它不是創建爲常規組合框(選擇元素),但它是一些「複雜」的JS組件。 我在python中編寫了一個while循環來按下按鍵(以獲得另一個項目),檢查頁面上是否有一些消息,如果消息不在那裏,循環應該結束。但它不能正常工作。它不會通過1項,但它似乎走了3項。 (我打印出「真正的/錯誤的消息」,所以我可以看到,如果它選擇了第15項,則只有5條消息來自循環而不是15條) 我不知道如何強制按下按鍵以縮短時間,只移動一個項目。機器人框架,硒,Python鍵在循環中的組合框跳過值

功能:

def find_not_used_protocol(self,entity): 
    actionChain = self.get_action_chain() 
    message = True 
    msgs=[] 
    while message: 
     #actionChain.key_down(Keys.ARROW_DOWN) #I tried this but it did not behave better 
     actionChain.send_keys(Keys.DOWN).perform() 
     actionChain.release() 
     #BuiltIn().sleep(1) #I tried this but it did not behave better 
     message = self.get_library_instance()._is_text_present(
      "This protocol already has a "+entity+". Please select different protocol.") 
     msgs.append(message) #this is here just for better debug 
    return msgs 

使用機器人:

Set Protocol for ${entity} 
    Wait Until Element Is Visible ${PROTOCOL INPUT} 20 
    Input Text ${PROTOCOL INPUT} 0001 
    click element ${PROTOCOL ARROW DOWN} 
    #set selenium speed .5 seconds #It does not really help 
    ${msgs}= find not used protocol ${entity} 
    log to console ${msgs} 

這是組合,它可能有400個項目等。對於他們中的一些有頁面上顯示的消息,對於一些不是。我需要停止在沒有消息,該項目的環...

enter image description here

代碼get_library_instance的(我的功能):

def get_library_instance(self): 
    if self.library is None: 
     self.library = BuiltIn().get_library_instance('ExtendedSelenium2Library') 
    return self.library 

代碼_is_text_present(從Selenium2Library)的:

def _is_text_present(self, text): 
    locator = "xpath=//*[contains(., %s)]" % utils.escape_xpath_value(text); 
    return self._is_element_present(locator) 

我會很高興任何建議如何使其工作。謝謝!

+0

循環將在最壞的情況下運行15次,否則只要'message'爲'false',它就會出來。你想達到什麼目的? –

+0

我需要檢查消息是否出現在頁面上的第一個組合框中的每個項目。當第一個項目沒有找到消息時結束循環。但是目前它停止在組合框第15項,但實際上,第6和第7項沒有消息,所以循環應該在這裏結束。甚至在組合框中有更多400個項目的情況下,即使有很多沒有消息的項目,它也會繼續迭代。 – neliCZka

+0

分享'get_library_instance'和'_is_text_present'的代碼 –

回答

1

因此最後找出了爲什麼循環沒有按預期那樣工作。 actionChain確實鏈接了事件,所以它必須在循環中定義並在循環中執行。現在它在組合中的1個項目中變得非常漂亮。 :)

def find_not_used_protocol(self,entity): 
    actionChain = self.get_action_chain() 
    actionChain.send_keys(Keys.DOWN) 
    actionChain.release() 
    message = True 
    while message: 
     actionChain.perform() 
     message = self.is_text_present(
      "This protocol already has a "+entity+". Please select different protocol.") 
0

我想改變的條件

message = self.get_library_instance()._is_text_present(
      "This protocol already has a "+entity+". Please select different protocol.") 

message = is_element_visible("//*contains(text(),'Please select different protocol')"] 

,然後創建一個方法,看看元素是可見或不可見

def is_element_visible(self, identifier): 
    try: 
     self.get_library_instance().wait_until_element_is_visible(identifier, 10) 
     return True 
    except Exception: 
     return False 

應該解決的問題。

+0

它仍然以與之前相同的方式操作:( – neliCZka

+0

需要一段時間才能顯示文本,在這種情況之前試着睡一下。 –

+0

是的,我啓用了BuiltIn()。在功能中睡眠(2),並且在機器人功能中啓用了「設置硒速度.5秒」,所以現在真的很慢,我可以看到它,所以它應該有足夠的時間來檢查文本...但仍然,像以前一樣工作:( – neliCZka