更新两个具有相同属性但功能不同的字段Argument

时间:2017-01-20 10:48:43

标签: python selenium selenium-webdriver

我是Selenium Python的新手,我正在自动完成一项任务。在我的任务中,我需要在两个字段中输入密码 - '密码'和'确认密码'

我正在使用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对两者来说都是一样的。我在两个字段之间的这些html中只能看到差异是MxTableOnChangeText的最后一个参数。 FOr密码字段为5,对于确认密码,它为6.因此根据参数我需要传递值。

为此,我尝试在方法Arguments中使用通配符,如下所示。但我得到错误。

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

请帮助我如何处理动态ID或如何在Method参数中使用通配符。

TIA

2 个答案:

答案 0 :(得分:0)

处理动态生成的id似乎是不可接受的,因为idmx-pw-)的字符串基础对于这两个字段都是相同的。选择这两个元素的简单方法是使用index:

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)")]')

答案 1 :(得分:0)

如果您的id是动态的,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]')