我试图用Selenium测试一个简单的webapp。用例是:
然后,列表中的最后一项应具有输入的值,文本框应为空。
在OS X(10.9.4)上的Safari(v7.0.5(9537.77.4))中,手动执行时此功能正常。使用Selenium驱动Chrome时也可以使用此功能。但是,当通过Safari WebDriver完成Selenium时,添加的项目只是一个空字符串。
奇怪的是,在WebDriver键入文本后,value
元素的input
属性具有正确的值;该值不会被添加到列表中,就像手动执行操作时一样。
下面是重现行为的代码。有没有人有任何见解?
from selenium import webdriver
url = 'http://mithril-test.cos.io/basic/'
d = webdriver.Safari()
try:
# navigate to 'http://mithril-test.cos.io/basic/'
d.get(url)
# click 'todo' link
d.find_element_by_link_text('todo').click()
# type in 'whatevs' in the input field
input_text = 'test'
d.find_element_by_tag_name('input').send_keys(input_text)
# the 'value' attribute of the input field is the thing we just typed
assert d.find_element_by_tag_name('input').get_attribute('value') == input_text
# click the submit button
d.find_element_by_tag_name('button').click()
todo_text = d.find_elements_by_tag_name('ul')[1].text
# passes: the list is 'one' 'two': incorrect behavior
assert todo_text == 'one\ntwo'
# fails: the list should be 'one' 'two' plus the thing we typed in: correct behavior
assert todo_text == 'one\ntwo\n' + input_text
except:
raise
finally:
d.close()
答案 0 :(得分:1)
问题出在Safari WebDriver的实现中,如in this issue所述。特别是,键入行为是在JavaScript中实现的,这会导致许多限制,如here所述。
我目前的解决方法是在测试中触发更改事件。