2015-11-26 179 views
2

我試圖右鍵單擊一個元素,然後從列表中選擇一個選項「重命名」。我有「右鍵單擊」工作,但無法從列表中選擇選項。簡稱鏈接12量角器:右鍵單擊時如何從列表中選擇一個項目

注1:

1:右鍵單擊可見的菜單選項是本地上下文菜單。所以,他們不會出現在我可以看到的DOM中。

2:應用程序只能運行在

我曾嘗試下面的代碼Chrome瀏覽器(不知道這是一個瀏覽器的問題):

browser.actions().mouseMove(elementVar).perform(); 
browser.actions().click(protractor.Button.RIGHT).click(protractor.Button.ARROW_DOWN).click(protractor.Button.ARROW_DOWN).click(protractor.Button.ARROW_DOWN).perform(); 

考慮,「重命名」,是第三選項列表中。

注2: 如果我只是運行應用程序並從我的鍵盤輸入'R',它會選擇「重命名」選項。但是當我嘗試在我的測試中運行它時,它不會選擇「重命名」選項。看下面我試過的代碼:

browser.actions().mouseMove(elementVar).perform(); 
browser.actions().click(protractor.Button.ARROW_RIGHT).sendKeys('R',protractor.Key.ENTER).perform(); 

以上代碼都不行。讓我知道是否需要更多信息。

編輯:

我猜下面要發生的事情:

我一次鼠標,腳本「正確點擊」,並認爲,「提示」顯示後。由於在「右鍵單擊」後顯示「工具提示」,我認爲菜單列表會移到背景(列表仍然可以看到工具提示),這就是向下箭頭鍵無效的原因。這可能嗎?如果是,我該如何等待工具提示不可見,然後右鍵單擊?

輸入:我試圖等待工具提示不可見,然後右鍵單擊,但「Arrow_down」仍然不起作用。

有一種方法可以將菜單列表放在前面,只要我們點擊右鍵?

重要

我把截圖後,我在元素上單擊右鍵,然後將截圖沒有顯示「菜單列表」。下面是屏幕截圖的代碼:

browser.actions().click(protractor.Button.RIGHT).perform() 
    .then(function() { 
     browser.takeScreenshot().then(function(screenShot) { 
      writeScreenShot(screenShot, "image.png"); 
}); 
}); 

//writeScreenShot takes two variables actual screenshot data and the file name. And the screenshot is saved as "image.png" 

需要做什麼?

+0

您是否嘗試先點擊元素? –

+0

是的,我嘗試先點擊元素,沒有運氣。 – FindABug

+0

[如何從「上下文列表菜單」 - protrator]中選擇一個項目的可能重複(http://stackoverflow.com/questions/34054640/how-to-select-an-item-from-context-list-menu- protrator) – alecxe

回答

0

當您發送ARROW鍵瀏覽器,你要送他們作爲鍵,而不是將它們傳遞給click()功能和ARROW_DOWN關鍵是和Key對象的一部分不BUTTON。下面是如何 -

browser.actions().mouseMove(elementVar).perform(); 
browser.actions().click(protractor.Button.RIGHT).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).perform(); 

爲了您的第二次嘗試,你應該在protractor.Button.ARROW_RIGHT的地方點擊右鍵發送RIGHT。當您向sendKeys()函數發送兩個動作/鍵時,您必須使用chord對象加入它們,該對象結合了一次按下兩個鍵的動作(例如:CTRL + C用於複製)。但在你的情況下,我不認爲它真的有必要。以下是如何使用它 -

browser.actions().mouseMove(elementVar).perform(); 
browser.actions().click(protractor.Button.RIGHT).sendKeys(protractor.Key.chord("r", protractor.Key.ENTER).perform(); //Not necessary as you wont be pressing R+ENTER in your keyboard 

OR

browser.actions().click(protractor.Button.RIGHT).sendKeys('R').sendKeys(protractor.Key.ENTER).perform(); 

希望這有助於。

+0

嗨Girish,謝謝,但我嘗試了你的兩個建議,但沒有運氣。下面是我已經嘗試過,但沒有工作: {browser.actions()。click(protractor.Button.RIGHT).sendKeys('R')。sendKeys(protractor.Key.ENTER).perform();} (protractor.Button.RIGHT).sendKeys(protractor.Key.ARROW_DOWN).sendKeys(protractor.Key.ARROW_DOWN).perform()}; – FindABug

0

使用XPath來解決你的問題

browser.actions().mouseMove(target).perform(); 
browser.actions().click(protractor.Button.RIGHT).perform(); 
element(by.xpath('//*[@id="context-menu"]/ul/li[1]')).click(); 

你的情況,這將是 「// * [@ ID =」 上下文菜單 「]/UL /李[3]」 最有可能。

相關問題