6

私は、nosetests を使用して Selenium Webdriver テストを実行しています。ノーズテストが失敗するたびにスクリーンショットをキャプチャしたい。webdriver、python、またはnosetests機能を使用して、最も効果的な方法でそれを行うにはどうすればよいですか?

4

4 に答える 4

8

私の解決策

import sys, unittest
from datetime import datetime

class TestCase(unittest.TestCase):

    def setUp(self):
        some_code

    def test_case(self):
        blah-blah-blah

    def tearDown(self):
        if sys.exc_info()[0]:  # Returns the info of exception being handled 
            fail_url = self.driver.current_url
            print fail_url
            now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S-%f')
            self.driver.get_screenshot_as_file('/path/to/file/%s.png' % now) # my tests work in parallel, so I need uniqe file names
            fail_screenshot_url = 'http://debugtool/screenshots/%s.png' % now
            print fail_screenshot_url
        self.driver.quit()
于 2013-02-27T16:58:56.477 に答える
6

まず、webdriverには次のコマンドがあります。

driver.get_screenshot_as_file(screenshot_file_path)

私は鼻の専門家ではありませんが(実際、これは私がそれを調べたのは初めてです)、py.testフレームワークを使用します(これは似ていますが、noseIMHOより優れています)。

ほとんどの場合、「テストが失敗したときに呼び出される」フックを実装する必要があるnose用の「プラグイン」を作成する必要があります。addFailure(test, err)

これで、テストオブジェクトaddFailure(test, err)からテスト名を取得し、ファイルのパスを生成できます。

その後、呼び出しますdriver.get_screenshot_as_file(screenshot_file_path)

で、フックpy.testを実装してプラグインを作成します。def pytest_runtest_makereport(item, call):内部ではcall.excinfo、必要に応じてスクリーンショットを分析して作成します。

于 2013-02-21T15:09:58.950 に答える
0

Pythonでは、以下のコードを使用できます。

driver.save_screenshot('/file/screenshot.png')
于 2013-02-21T04:44:37.043 に答える
0

テストを別の方法で設定している可能性がありますが、私の経験では、このタイプの機能を手動で組み込み、障害が発生した時点でそれを繰り返す必要があります。Selenium テストを実行している場合、私のように多くの find_element_by_ somethingを使用している可能性があります。この種のことに取り組むことができるように、次の関数を作成しました。

def findelement(self, selector, name, keys='', click=False):

    if keys:
        try:
            self.driver.find_element_by_css_selector(selector).send_keys(keys)
        except NoSuchElementException:
            self.fail("Tried to send %s into element %s but did not find the element." % (keys, name))
    elif click:
        try:
            self.driver.find_element_by_css_selector(selector).click()
        except NoSuchElementException:
            self.fail("Tried to click element %s but did not find it." % name)
    else:
        try:
            self.driver.find_element_by_css_selector(selector)
        except NoSuchElementException:
            self.fail("Expected to find element %s but did not find it." % name)

あなたの場合、スクリーンショット コード (self.driver.get_screenshot_as_file(screenshot_file_path)) は、self.fail の前に移動します。

このコードでは、要素を操作するたびに、self.findelement('selector', 'element name') を呼び出します。

于 2015-02-09T16:48:25.047 に答える