1

私のテストでは、find_element_by_xpathを使用して、(アクションの後に) 特定のテキストが存在するかどうかを確認しようとしました。正しい式とテスト パスを使用すると、ルーチンはすぐに正しく終了します。ただし、間違ったテキストを試すと (テストが失敗することを意味します)、永遠にハングアップし、スクリプトを強制終了する必要があります。そうしないと終了しません。

これが私のテストです(入力したThxユーザー、クライアント、またはパスワードが正しくないという表現は、ユーザーが何をしてもシステムには存在しません):

# -*- coding: utf-8 -*-                                                         
import gettext                                                                  
import unittest                                                                 

from selenium import webdriver                                                  

class TestWrongLogin(unittest.TestCase):                                        
    def setUp(self):                                                            
        self.driver = webdriver.Firefox()                                       
        self.driver.get("http://10.23.1.104:8888/")                             
        # let's check the language                                              
        try:                                                                    
            self.lang = self.driver.execute_script("return navigator.language;")
            self.lang = self.lang("-")[0]                                       
        except:                                                                 
            self.lang = "en"                                                    
        language = gettext.translation('app', '/app/locale', [self.lang],          
                                       fallback=True)                           
        language.install()                                                      
        self._ = gettext.gettext                                                

    def tearDown(self):                                                         
        self.driver.quit()                                                      

    def test_wrong_client(self):                                                
        # test wrong client                                                     
        inputElement = self.driver.find_element_by_name("login")                
        inputElement.send_keys("root")                                          
        inputElement = self.driver.find_element_by_name("client")               
        inputElement.send_keys("Unleash")                                        
        inputElement = self.driver.find_element_by_name("password")             
        inputElement.send_keys("qwerty")                          
        self.driver.find_element_by_name("form.submitted").click()              
        # wait for the db answer                                                
        self.driver.implicitly_wait(10)                                         
        ret = self.driver.find_element_by_xpath(                                
            "//*[contains(.,'{0}')]".\                                          
            format(self._(u"Thx user, client or password you entered is incorrect")))
        self.assertTrue(isinstance(ret, webdriver.remote.webelement.WebElement))

if __name__ == '__main__':                                                      
unittest.main()   

なぜそれが行われ、どうすればそれを防ぐことができますか?

編集:問題を見つけることができました:UbuntuでFirefoxを実行していますが、現在使用しているFirefoxのバージョン(17.0)はセレンでサポートされていません。ハブを介して IE8 で同じテストを実行すると、問題なく動作します。

4

1 に答える 1

0

問題は xpath 式にあります。テキストを利用可能なすべてのテキストと直接比較しないでください。したがって、テキストが一致しない場合、DOM で使用可能なすべてのテキストと比較されます。

エラーメッセージを表示するXpath経由で要素/ラベルを指定してから、その要素のテキストプロパティを確認してください。

inputs = driver.find_elements(By.XPATH, "//input")

このコードは、Web ページに存在するすべての入力要素をフェッチします。

これは、テストのスピードアップに役立ちます。これがお役に立てば幸いです...最善を尽くします:-)

于 2012-11-24T09:41:39.643 に答える