我需要迭代組合框中的項目,它不是創建爲常規組合框(選擇元素),但它是一些「複雜」的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個項目等。對於他們中的一些有頁面上顯示的消息,對於一些不是。我需要停止在沒有消息,該項目的環...
代碼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)
我會很高興任何建議如何使其工作。謝謝!
循環將在最壞的情況下運行15次,否則只要'message'爲'false',它就會出來。你想達到什麼目的? –
我需要檢查消息是否出現在頁面上的第一個組合框中的每個項目。當第一個項目沒有找到消息時結束循環。但是目前它停止在組合框第15項,但實際上,第6和第7項沒有消息,所以循環應該在這裏結束。甚至在組合框中有更多400個項目的情況下,即使有很多沒有消息的項目,它也會繼續迭代。 – neliCZka
分享'get_library_instance'和'_is_text_present'的代碼 –