2017-04-12 76 views
0

我發現了一個類似的主題here並遵循該示例,但解決方案似乎不工作。Ruby Webdriver ActionClass double_click不工作

我想用文件找到here雙擊一個元素。

我有以下代碼:

@article_zone = @driver.find_element(:id, "nbviewer-zone-overlay-13B27E79C7BC32F1").attribute("id") 

其中分配@article_zone = "nbviewer-zone-overlay-13B27E79C7BC32F1"

那麼我的下一行代碼:

@driver.action.double_click("id=" + @article_zone).perform

但此行拋出以下錯誤: Error: TypeError: expected Selenium::WebDriver::Element, got "id=nbviewer-zone-overlay-13B27E79C7BC32F1":String

元素id=nbviewer-zone-overlay-13B27E79C7BC32F1是我正在嘗試雙擊。我對於爲什麼收到這個錯誤感到不知所措。

任何幫助,非常感謝。感謝您的期待!

+0

說一些「看起來沒有工作」是不夠的。爲什麼現有的解決方案不起作用? – coreyward

+0

好問題 - 這就是我想要確定的。看起來我正確地遵循了這些例子,但仍然收到錯誤。現有的解決方案帖子說,它的工作,所以我試圖確定什麼可能是錯誤的我的情況,因爲它已經超過一年後,這個職位和事情可能已經改變,我不能精確定位(版本/司機等)。我也是這個新手。 –

回答

0

的問題是因爲double_click默認試圖在元素中間點擊。當我檢查元素時,它的中間隱藏在「摺疊」下方。爲了解決這個問題,我可以移動到具有偏移量的元素(從左上角)並執行雙擊:

@driver.action.move_to(@article, 10, 10).double_click.perform 
0

當你這樣做:

@driver.action.double_click("id=" + @article_zone).perform 

你叫上String實例的+方法。這將試圖隱含地將@article_zone轉換爲字符串並將其附加到"id="。然後將該字符串交給double_click方法,該方法預計的是Selenium::WebDriver::Element的實例。

我懷疑,如果你刪除"id=" +你會好起來的:

@driver.action.double_click(@article_zone).perform 
+0

感謝您在這裏的快速反應 - 當我嘗試我得到同樣的錯誤。 '錯誤:TypeError:預期Selenium :: WebDriver :: Element,得到「nbviewer-zone-overlay-13B27E79C7BC32F1」:String'我懷疑它不喜歡它作爲'String'基於錯誤,但不知道如何將其轉換爲它正在尋找的Selenium :: WebDriver :: Element。 –

+0

我也嘗試了第一行代碼,沒有像'@article_zone = @ driver.find_element(:id,「nbviewer-zone-overlay-13B27E79C7BC32F1」)這樣的''屬性''',但是'@ article_zone'指定爲'#< Selenium :: WebDriver :: Element:0x..f3c886a24 id =「0.3165787053371305-3」>'。這不會引發錯誤 - 但也不會執行雙擊。它基本上跳過那一步無所事事。 –

+0

@GabrielKlueh嗯,這是正確的對象類型,所以這就是你想要的。您已經轉向流程的下一個階段:找出您爲什麼沒有從'double_click'獲得預期結果。你不能只把它交給垃圾,並期望它開始工作。 ;) – coreyward