Safari WebDriver无法在文本框中提交

时间:2014-08-01 20:38:13

标签: selenium safari selenium-webdriver

我试图用Selenium测试一个简单的webapp。用例是:

  • 开始here
  • 点击' todo'链接在第一个列表中
  • 在文本框中输入内容
  • 点击按钮

然后,列表中的最后一项应具有输入的值,文本框应为空。

在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()

1 个答案:

答案 0 :(得分:1)

问题出在Safari WebDriver的实现中,如in this issue所述。特别是,键入行为是在JavaScript中实现的,这会导致许多限制,如here所述。

我目前的解决方法是在测试中触发更改事件。