Macaca Python macaca 对下拉框实现 select 操作

Jerry li · 2017年10月26日 · 最后由 KD 回复于 2017年11月09日 · 1512 次阅读

最近在把原来 selenium 上已经实现的用例迁移到 macaca 中,发现 Python macaca 对于下拉框操作没有对应的封装,导致对应的操作执行失败。
原来在 selenium 中的封装:
from selenium.webdriver.support.ui import Select

Select(browser.find_element_by_id("id")).select_by_value("value")

在 macaca 的代码中找了很久,没发现有对应的方法可以直接替代,于是尝试从 selenium 中把这个方法迁移过来:

  1. 将 selenium.webdriver.support.select.py 文件复制到 macaca 的对应代码目录
  2. 将 select 文件 select 类的 init 方法中注释掉其他,只留下 self._el = webelement 这行:

  3. 将 select_by_value 方法作如下修改:

  1. 修改完成,在 macaca 中测试如下:

from macaca.select import Select
Select(self.driver.element_by_css_selector("#calc1_js_div1 > li:nth-child(3) > select")).select_by_value('2')

测试通过!

selenium 的 select 文件中提供了比较丰富的方法进行调用, 如果需要可以自行修改、调试,达到可以引用的效果。
当然最好的方式是 macaca 可以提供官方的方法封装。

附上对应的代码片段:

select 文件中的修改:

class Select(object):

def init(self, webelement):
self._el = webelement

def select_by_value(self, value):
css = "option[value =%s]" % self._escapeString(value)
opts = self._el.elements_by_css_selector( css)
matched = False
for opt in opts:
opt.click()

测试用例:

def test_select(self):
test_url = 'https://www.fangdaijisuanqi.com/'
self.driver.maximize_window()
self.driver.get(test_url)
from macaca.select import Select
Select(self.driver.element_by_css_selector("#calc1_js_div1 > li:nth-child(3) > select")).select_by_value('2')
time.sleep(2)
Select(self.driver.element_by_id("years")).select_by_value('6')
time.sleep(2)
Select(self.driver.element_by_id("lilv")).select_by_value('6')
time.sleep(2)

共收到 3 条回复 时间 点赞

macaca 对于单选框复选框 checkbox,是不是也没有现成方法支持啊?楼主也是通过这种方法处理的吗?

KD 回复

通过同样的方式应该也是可以解决的,具体可以看下 selenium 里 select 的实现

@junhe macaca 有没有提供官方的方法封装,对应处理下拉框、单选框、复选框的操作呢? 求 JAVA 示例

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册