用于JavaScript的Selenium Webdriver - 添加'Sizzle'策略

时间:2013-09-04 19:24:47

标签: javascript selenium selenium-webdriver

我在selenium-webdriver源代码中做了一些讨论,找到了一个元素定位器策略列表:

webdriver.Locator.Strategy = {
  'className': webdriver.Locator.factory_('class name'),
  'class name': webdriver.Locator.factory_('class name'),
  'css': webdriver.Locator.factory_('css selector'),
  'id': webdriver.Locator.factory_('id'),
  'js': webdriver.Locator.factory_('js'),
  'linkText': webdriver.Locator.factory_('link text'),
  'link text': webdriver.Locator.factory_('link text'),
  'name': webdriver.Locator.factory_('name'),
  'partialLinkText': webdriver.Locator.factory_('partial link text'),
  'partial link text': webdriver.Locator.factory_('partial link text'),
  'tagName': webdriver.Locator.factory_('tag name'),
  'tag name': webdriver.Locator.factory_('tag name'),
  'xpath': webdriver.Locator.factory_('xpath')
};

是否可以使用sizzle选择器引擎扩展它?

某人did it in Java但我无法弄清楚如何使用JavaScript库。


当我尝试

webdriver.Locator.Strategy.sizzle = webdriver.Locator.factory_('sizzle');

我明白了:

  

TypeError:无法读取未定义的属性“策略”

所以扩展......并不是一件容易的事。

1 个答案:

答案 0 :(得分:1)

从我自己的角度来看,css2 / css3选择器可以满足您的需求。

由于默认api错误,你会使用像driver.findElement(webdriver.By.css('input[name="textbox"]'))这样的非友好api。没有全面的文件,这确实很糟糕。

我建议您使用https://npmjs.org/package/webdriver-helper来获得友好的api支持。

browser.element('input[name="textbox"]')browser.link(':contains("partial link text")')可以为您提供帮助。