2017-08-21 1 views
2

Ich bin mir bewusst, dass Selen offenbar keine Navigation in Kontextmenüs unterstützt. Aber ich habe auch in mehreren anderen Threads gesehen, dass es eine Umgehung gibt, indem man Aktionsketten verwendet. Verwenden Sie context_click() gefolgt von Pfeiltasten, um durch die Menüs zu navigieren.Navigieren in Kontextmenüs (Selenium, Python)

Alle Beispiele, die ich gesehen habe, haben Java verwendet, und wenn ich in Python übersetzte, würde nur der context_click() Befehl registriert werden. Seltsamerweise würde ich auch keinen Fehler bekommen. Andere Quellen haben gesagt, dass die Kontextmenüs, die Selenium produziert, nur Systemlevel sind, und Selen kann sie daher nicht berühren, sondern nur erstellen.

Also meine Frage ist, hat jemand in der Lage erfolgreich zu navigieren und Optionen aus Kontextmenüs durch Selen gewählt? Python-Beispiele werden bevorzugt, aber ich werde jeden Rat oder Antworten nehmen, die ich bekommen kann.

Edit:

Code:

driver.get('https://www.google.com/') 
actionChains = ActionChains(driver) 
actionChains.context_click().send_keys(Keys.ARROW_UP).send_keys(Keys.ENTER).perform() 

Kontext:

Dies ist nur ein Test-Skript, das ich laufen worden, um diese Situation zu testen. In meinem persönlichen Projekt muss ich im Kontextmenü navigieren, um auf eine Chrome-Erweiterung zuzugreifen. Da Selenium nur innerhalb der Webseite interagieren kann, kann ich nicht auf die Schaltfläche für die Chrome-Erweiterung klicken, die vom Browser angezeigt wird. Das ist also der Workaround, den ich versucht habe.

Research:

https://testingrepository.com/how-to-right-click-using-selenium-webdriver/ - Diese Quelle sagt, dass seleniums Kontextmenüs nur auf Systemebene sind. In Java-Beispielen verwenden sie auch einen .build() Befehl. Soweit ich weiß, ist dieser Befehl für Python nicht verfügbar.

Select an Option from the Right-Click Menu in Selenium Webdriver - Java - Thread, der darauf hinweist, dass Pfeiltasten-Befehle funktionieren sollten. Allerdings sind alle Beispiele verwenden Java und den .build() Befehl als auch

https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/common/action_chains.py - zeigt, dass ActionChains() Pythons-Version eines .build() Befehl sind. Könnte allgemein bekannt sein. Das wusste ich vorher nicht.

How to perform right click using Selenium ChromeDriver? - sehr ähnliche Frage an meine. Während ein Benutzer vorschlägt, dass mit dem Menü nicht interagiert werden kann, schlägt ein anderes vor, dass das actionChain-Workaround funktioniert.

+1

Können Sie uns Ihre Arbeit/Forschung zeigen? – DebanjanB

+0

@DebanjanB Bearbeitet. Danke –

+0

Wie hier erklärt - http://elemententalselenium.com/tips/63-right-clickFurther - Rechtsklick-Menüs sind oft Menüs auf Systemebene unantastbar durch Selen. Weitere Diskussion hier: https://github.com/GoogleChrome/puppeteer/issues/1575 – kchak

Antwort

2

Dünne,

Ich hatte das gleiche Problem und Wunder, dass niemand beantwortet das schon ... Es war mir nicht möglich, es mit Selen zu lösen, führen Selen innerhalb der Seite navigieren würde. Meine Lösung:

import win32com.client as comclt 
wsh= comclt.Dispatch("WScript.Shell") 
ActionChains(driver).move_to_element(element).context_click().perform() 
wsh.SendKeys("{DOWN}") # send the keys you want