2014-02-24 31 views
7

我有一组测试,我需要登录然后执行搜索。 我的应用程序是一个角JS,我正在起诉量角器。 事实上,我的测试在那里工作的罚款,直到我收到我的申请,新的工具包,我所有的测试都在这一点上失败:无法集中网页元素发送密钥

element(by.id('mainGlobalSearchBtn')).sendKeys('a'); 

这里是我的控制台输出:

1) change number of items displayed by page should display 20 items per page 

Message  : UnknownError: unknown error: cannot focus element 
(Session info: chrome = 33.0.1750.117) 
(Driver info : chromedriver = 2.8.241075, platform = Windows NT 6.1 SP1 x86_64) 
(WARNING  : The server did not provide any stacktrace information) 

Command duration or timeout: 70 milliseconds 
Build info: version: '2.39.0', 
revision: 'ff23eac', 
time: '2013-12-16 16:11:15' 
System info: host: 'vmstmselhub', 
ip: '203.0.113.1', 
os.name: 'Windows 7', 
os.a 
rch: 'amd64', 
os.version: '6.1', 
java.version: '1.7.0_40' 
Session ID: aad8a0d0ed00088c3bbfc80c546c75ff 
Driver info: org.openqa.selenium.chrome.ChromeDriver 

Capabilities[{ 
    platform = XP, 
    acceptSslCerts = true, 
    javascriptEnabled = true, 
    browserName = chrome, 
    chrome = { 
     userDataDir = C:\Users\orsyp\AppData\Local\Temp\scoped_dir3592_13478 
    }, 
    rotatable = false, 
    locationContextEnabled = true, 
    version = 33.0.1750.117, t 
    akesHeapSnapshot = true, 
    cssSelectorsEnabled = true, 
    databaseEnabled = false, 
    handlesAlerts = true, 
    browserConnectionEnabled = false, 
    nativeEvents = true, 
    webStorageEnabled = true, 
    applicationCacheEnabled = false, 
    takesScreenshot = true 
}] 


Stacktrace : 

UnknownError : unknown error: cannot focus element 
(Session info: chrome = 33.0.1750.117) 
(Driver info : chromedriver = 2.8.241075, platform = Windows NT 6.1 SP1 x86_64) 
(WARNING  : The server did not provide any stacktrace information) 

Command duration or timeout: 70 milliseconds 
Build info: version: '2.39.0', 
revision: 'ff23eac', 
time: '2013-12-16 16:11:15' 
System info: host: 'vmstmselhub', 
ip: '203.0.113.1', 
os.name: 'Windows 7', 
os.a 
rch: 'amd64', 
os.version: '6.1', 
java.version: '1.7.0_40' 
Session ID: aad8a0d0ed00088c3bbfc80c546c75ff 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
Capabilities[{ 
    platform = XP, 
    acceptSslCerts = true, 
    javascriptEnabled = true, 
    browserName = chrome, 
    chrome = { 
     userDataDir = C:\Users\orsyp\AppData\Local\Temp\scoped_dir3592_13478 
    }, 
    rotatable = false, 
    locationContextEnabled = true, 
    version = 33.0.1750.117, 
    takesHeapSnapshot = true, 
    cssSelectorsEnabled = true, 
    databaseEnabled = false, 
    handlesAlerts = true, 
    browserConnectionEnabled = false, 
    nativeEvents = true, 
    webStorageEnabled = true, 
    applicationCacheEnabled = false, 
    takesScreenshot = true 
}] 
at new bot.Error(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js: 109: 18 
) 
at Object.bot.response.checkResponse(
    C:\node_modules\protractor\node_module s\selenium-webdriver\lib\atoms\response.js: 106: 9 
) 
at C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js: 276: 20 
at C:\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js: 1178: 15 
at webdriver.promise.ControlFlow.runInNewFrame_(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 1445: 20 
) 
at notify(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\we bdriver\promise.js: 328: 12 
) 
at notifyAll(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 297: 7 
) 
at fulfill(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 402: 7 
) 
at C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 1312: 10 
at C:\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js: 1178: 15 

=== = async task === = 

WebElement.sendKeys([object Object]) 
at webdriver.WebDriver.schedule(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js: 267: 15 
) 
at webdriver.WebElement.schedule_(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js: 1591: 23 
) 
at webdriver.WebElement.sendKeys(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js: 1752: 15 
) 
at element.(anonymous function)[as sendKeys](
    C:\node_modules\protractor\lib\protractor.js: 440: 32 
) 
at C:\node_modules\protractor\lib\protractor.js: 89: 34 
at C:\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js: 1178: 15 
at webdriver.promise.ControlFlow.runInNewFrame_(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 1445: 20 
) 
at notify(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 328: 12 
) 
at notifyAll(
    C:\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js: 297: 7 
) 

=== = async task === = 
at null. <anonymous> (
    C:\node_modules\protractor\jasminewd\index.js: 53: 12 
) 
at null. <anonymous> (
    C:\node_modules\protractor\node_modules\minijasminenode\lib\async-callback.js: 45: 37 
) 
at jasmine.Block.execute(
    C:\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js: 1168: 17 
) 
at jasmine.Queue.next_(
    C:\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js: 2200: 31 
) 
at null._onTimeout(
    C:\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js: 2190: 18 
) 
at Timer.listOnTimeout[as ontimeout](
    timers.js: 110: 15 
) 


Finished in 8.45 seconds 
1 test, 1 assertion, 1 failure 

我会补充一点,量角器不能点击/在我的任何网页元素的输入文字在登录后

这里是我的搜索表单HTML:

<form class="ng-pristine ng-valid" id="mainSearchGroup" name="mainSearchGroup"> 
    <div id="mainSearch"> 
     <input class="ng-pristine ng-valid" id="mainGlobalSearch" name= 
    "mainGlobalSearch" placeholder="Schedule workflows, name..." type= 
    "text"> 

     <div id="mainSearchIn" style="background-image: url(" title= 
    "Filter by..."> 
     <div class="word-ellipsis ng-binding" id="mainSearchInText"> 
      All 
     </div> 

     <div id="mainSearchInRightGrayBorder"></div> 

     <div id="mainSearchInBox" style=""></div> 
    </div> 

    <div class="ng-binding" id="mainGlobalSearchBtn"> 
     <div class="clear"></div> 
     </div> 
    </div> 
</form> 
+0

请包括有问题页面的HTML。 –

回答

2

这量角器错误或更精确角1.2.X及以上和量角器之间的兼容性错误=>同步失败 散步周围将在每个功能之前添加这一行:

ptor.ignoreSynchronization = true; 

并添加睡眠('5000')与Angular JS手动同步。

0

您可以尝试用<input type="text"><input type="button">替换“#mainGlobalSearchBtn”div,该打算用于接收.sendKeys()命令。

+0

这不起作用,正确的语法可能是'browser.ignoreSynchronization = true'。 – LeeGee

5

如果它对下一个人有帮助,我必须在发送密钥之前在域内使用.click()。

2

显然有一些问题when using protractor, angular, and chrome.

尝试使用Firefox作为浏览器。编辑你的量角器配置文件是这样的:

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['spec/spec.js'], 
    capabilities: { 
    'browserName': 'firefox' 
    } 
} 

这样做后,我不再经历这个问题。

3

它在量角器中为我工作:

browser.driver.actions()。 mouseDown(元素)。 click()。 sendKeys(“某些文本”)。 perform();

谢谢。

3

有点迟到了,但那些寻找一个解决这个问题,同时使用的python硒可以使用下面的代码:

actions = webdriver.ActionChains(driver) 
actions.move_to_element(my_div) 
actions.click() 
actions.send_keys(Keys.SPACE) # Replace with whichever keys you want. 
actions.perform() 

哪里my_div是您之前选择的元素,也许用这样的代码:

my_div = item.find_element_by_css_selector("div.foobar")