2017-01-20 5 views
1

私はSelenium Pythonにはかなり新しく、1つのタスクを自動化しています。私の仕事では、「パスワード」と「パスワードの確認」の2つのフィールドにパスワードを入力する必要があります同じ属性ではあるが関数が異なる2つのフィールドを更新する引数

私はsend_keysを使用してパスワードテキストを渡しています。しかし、私の問題は両方のフィールドが同じ属性を持ち、属性が動的に生成されるということです。以下は両方のフィールドのHTML要素です。

パスワードフィールド

<input size="12" id="mx-pw-1560134066" onblur="this.onkeyup();" value="" onkeyup="MxTableOnChangeText(this, 'CREDENTIAL_comhpmvcduiviewCreateVCDomainGroupAction1484904977993', '09USE939SBK9', 5)" type="PASSWORD"> 

を確認し、パスワードフィールド

<input size="12" id="mx-pw-1337668046" onblur="this.onkeyup();" value="" onkeyup="MxTableOnChangeText(this, 'CREDENTIAL_comhpmvcduiviewCreateVCDomainGroupAction1484904977993', '09USE939SBK9', 6)" type="PASSWORD"> 

IDフィールドの数が動的に生成されます。 onblurは両方とも同じです。これら2つのフィールドの間でhtmlで見られる違いは、MxTableOnChangeTextの最後の引数です。 FOr Passwordフィールドは5、Confirm Passwordは6です。引数に基づいて値を渡す必要があります。

そのために、以下のようにメソッドの引数の中にワイルドカードを使用しようとしました。しかし、私はエラーが発生しています。

driver.find_element_by_xpath('//input[matches(@onkeyup,"MxTableOnChangeText(this,*,*,5)")').send_keys('password') 

動的IDを処理する方法またはメソッド引数の中でワイルドカードを使用する方法を教えてください。

TIA

答えて

0

が動的にidを生成取り扱いがidの文字列ベース(mx-pw-)は、両方のフィールドに同じであるとして、あなたのケースでは受け入れられないように見えます。

password = driver.find_elements_by_xpath('//input[@type="PASSWORD"]')[0] 
confirm_password = driver.find_elements_by_xpath('//input[@type="PASSWORD"]')[1] 

それとも、このようonkeyup属性を使用することができます:

password = driver.find_element_by_xpath('//input[contains(@onkeyup, ", 5)")]') 
confirm_password = driver.find_element_by_xpath('//input[contains(@onkeyup, ", 6)")]') 
0

あなたidが動的である場合は、1つの代替方法があり、mx-pwが固定され、唯一の両方の要素を選択する簡単な方法は、インデックスを使用することです番号変更中 -

// for password 

driver.find_elements_by_xpath('//input[starts-with(@id, "mx-pw")][1]') 

// for confirm password 

driver.find_elements_by_xpath('//input[starts-with(@id, "mx-pw")][2]') 
関連する問題