3

PythonとSeleniumを使用してFirefoxブラウザをリモートコントロールしています。私はmozilla developer siteの指示に従って、マリオネットを使用するように切り替えました。それはすべて正常に動作します。SeleniumでMozilla Marionette Webドライバを使用しているときにWebドライバ例外を無効にするには

要素を選択したい場合は1ページあります。私は例外を得る。私はそれがドライバをborkに引き起こしているJavascriptの警告だと思う。誰かがJavascriptのエラーについてドライバをあまり気にしないようにする方法を知っていますか?さらに、Python Marionetteクライアントの包括的な文書がどこにあるのか誰にでも分かりますか?

申し訳ありませんが、私は要素を選択しようとしているクライアントのプライベートサイトであるため、コードを完全に再現することはできません。

from selenium import webdriver 

# see https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver 

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

caps = DesiredCapabilities.FIREFOX 

# Tell the Python bindings to use Marionette. 
# This will not be necessary in the future, 
# when Selenium will auto-detect what remote end 
# it is talking to. 
caps["marionette"] = True 
caps["binary"] = "/Applications/Firefox.app/Contents/MacOS/firefox-bin" 

from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
browser = webdriver.Firefox(capabilities=caps) 
webdriver.Firefox.get_capabilities() 
browser.implicitly_wait(3) 

browser.get("https://www.example.com/examplepage") 

saved_exports_field = browser.find_element_by_id('exportlist') 
saved_exports_field_select = Select(saved_exports_field) 

これは間違っています。最初の2つ目の質問に答えるために

--------------------------------------------------------------------------- 
WebDriverException      Traceback (most recent call last) 
<ipython-input-35-6e712759af43> in <module>() 
     1 saved_exports_field = browser.find_element_by_id('exportlist') 
----> 2 saved_exports_field_select = Select(saved_exports_field) 
     3 #saved_exports_field_select.select_by_visible_text('test score export dan') 

/Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/support/select.py in __init__(self, webelement) 
    39     webelement.tag_name) 
    40   self._el = webelement 
---> 41   multi = self._el.get_attribute("multiple") 
    42   self.is_multiple = multi and multi != "false" 
    43 

/Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py in get_attribute(self, name) 
    134    attributeValue = self.parent.execute_script(
    135     "return (%s).apply(null, arguments);" % raw, 
--> 136     self, name) 
    137   else: 
    138    resp = self._execute(Command.GET_ELEMENT_ATTRIBUTE, {'name': name}) 

/Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py in execute_script(self, script, *args) 
    463   return self.execute(Command.EXECUTE_SCRIPT, { 
    464    'script': script, 
--> 465    'args': converted_args})['value'] 
    466 
    467  def execute_async_script(self, script, *args): 

/Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params) 
    234   response = self.command_executor.execute(driver_command, params) 
    235   if response: 
--> 236    self.error_handler.check_response(response) 
    237    response['value'] = self._unwrap_value(
    238     response.get('value', None)) 

/Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response) 
    190   elif exception_class == UnexpectedAlertPresentException and 'alert' in value: 
    191    raise exception_class(message, screen, stacktrace, value['alert'].get('text')) 
--> 192   raise exception_class(message, screen, stacktrace) 
    193 
    194  def _value_or_default(self, obj, key, default): 

WebDriverException: Message: SyntaxError: missing) in parenthetical 

おかげ

答えて

1

リリース3.0.0-beta-3には、get_attributeの使用を妨げるバグがあります。ですから、3.0.0-β-2に戻すことができますいずれかまたはファイルを自分で編集することによって、バグを修正することができますによって

raw = pkgutil.get_data(__package__, 'getAttribute.js') 

ファイル /Users/dan/anaconda/envs/lt/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.pyでは、ライン133を交換

raw = pkgutil.get_data(__package__, 'getAttribute.js').decode('utf8') 
+0

ありがとうございました。これは、コードが例外によって失敗したことを修正しました。私はまだ "select_by_visible_text"が実際にはオプションを選択しないという点で奇妙な問題を抱えています。テキストを変更すると失敗しますが、Firefoxに要素を選択させようとしているとは思われません。私はより多くのデバッグを試みる必要があります。 – Dan

+0

@ダン、私もネイティブのドロップダウンリストでいくつかの問題に直面した。

+0

Florentさん、ありがとうございます。私はそれを試してみることができます。当時私はChromeを使用するように切り替えました – Dan

0

を次のようにトレースは、this documentationはかなり包括的ならしいです。これはあなたのニーズを満たしていますか?

WebDriverExceptionを無効にする方法については、私が知っている唯一のことはブロックtry:except:ブロックを使用することですが、これは良い考えではないと思います。 WebDriverExceptionは、Webdriverが使用する基本的な例外です。使用しているNoSuchElementExceptionなどのすべてのエラーをキャッチします。

JavaScriptエラーを具体的に検出する方法はわかりません。これらのエラーは、WebDriverExceptionと表示されます。私はあなたがこの質問をしているので、JavaScript自体を修​​正することは選択肢ではないと思いますか?

ウェブドライブのget_log() methodを試してみてください。私が読んだことから、JSエラーはこのメソッドから返された結果に表示されるはずです。 Select()コールの前にそのデータを解析し、それに応じてbrowser.get_log(log_type)log_type'browser''client''driver'、または'server'のいずれかになります)を呼び出してみてください。

+0

フィレンツェの答えは、まだオプションを選択していないが、例外を修正しました。私はget_logを使って、なぜオプションが選択されていないのかについての洞察が得られるかどうかを調べるつもりです。 – Dan

関連する問題