12

Firefox で正常に動作するセレン テストを実行していますが、PhantomJS を使用するとエラーが発生します。

ここに私のpythonコードがあります:

    driver.find_element_by_link_text("Add Province").click()
    driver.find_element_by_id("id_name").clear()
    driver.find_element_by_id("id_name").send_keys("Frosinone")
    driver.find_element_by_id("id_code").clear()
    driver.find_element_by_id("id_code").send_keys("FR")

そして、ここに私が得ているエラーがあります:

driver.find_element_by_id("id_name").clear()
self._execute(Command.CLEAR_ELEMENT)
return self._parent.execute(command, params)
self.error_handler.check_response(response)
raise exception_class(message, screen, stacktrace)
E       InvalidElementStateException: Message: u'Error Message => \'Element is not currently interactable and may not be manipulated\'\n caused by Request => {"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"81","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:38159","User-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\\"sessionId\\": \\"e0d4d1b0-2f36-11e3-af69-b579903d9fbd\\", \\"id\\": \\":wdc:1381139859399\\"}","url":"/clear","urlParsed":{"anchor":"","query":"","file":"clear","directory":"/","path":"/clear","relative":"/clear","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/clear","queryKey":{},"chunks":["clear"]},"urlOriginal":"/session/e0d4d1b0-2f36-11e3-af69-b579903d9fbd/element/%3Awdc%3A1381139859399/clear"}' ; Screenshot: available via screen

element を見つけることができませid_nameんが、FireFox で実行すると完全に動作します。

この問題に対処する PhantomJS の現在のバグがあるかどうかは誰にもわかりませんか?

現在、Ubuntu 12.04 で Selenium 2.35.0 と PhantomJS 1.9.2 を使用しています

4

6 に答える 6

2

機能テストには、PhantomJS、ChromeDriver、および FirefoxDriver を使用しました。PhantomJS と他のドライバーの違いは、PhantomJS ドライバーはページが読み込まれるのを待たずに、制御をテスト プログラム (Python コード) に返すことです。これをチェックしてください!

これは PhantomJS ドライバーの正しい動作ではないと思います。WebDriver の API ドキュメントで見つけました: http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.html#get(java.lang.String)開く WebDriver の次のメソッド指定された URL

void get(java.lang.String url)

説明は次のとおりです。

現在のブラウザ ウィンドウに新しい Web ページを読み込みます。これは完了し (...)、ロードが完了するまでメソッドはブロックされます。

その可能性があります(ここでは@Ashleyのコメントに同意します)

  • Firefox では、テスト コードが要素にアクセスしようとする前に、ページが完全にレンダリングされます。
  • PhantomJS では、テスト コードは、まだ準備ができていないときに、より早くページと対話しようとします。

テストの最初の要素にアクセスする直前に、たとえば 2 秒間テスト コードを "スリープ" すると、簡単に見つけることができます。

その場合は、ページの状態を確認して (2 秒ではなく) ページの読み込みを待つことで、この問題の解決を試みることができます。条件が真になるまでループしてみてください。次に、残りのテストを実行します。

注: ヘッドレス PhantomJS ドライバーの実装でも、いつでもスクリーンショットを撮ることができます! 問題をデバッグする可能性を提供します

于 2013-10-17T15:03:10.667 に答える
1

PhantomJS でも同じ問題が発生していました。ドライバー参照を次のように作成した後、ウィンドウサイズを設定する行を追加して解決しました-

driver = webdriver.PhantomJS()
driver.set_window_size(1124, 850) # set browser size.
driver.get("http:example.com") # Load page

解決策は、browser.get("") を実行する前に偽のブラウザー サイズを設定する必要があることです。

于 2017-01-25T10:33:19.853 に答える
0

これを正しく行う 1 つの方法は、表示されているかどうかを確認することです。field=driver.find_element_by_id("id_name") if field.is_displayed(): field.clear()

于 2016-11-17T11:04:40.473 に答える