selenium 循环通过单选按钮 python
selenium loop through radio buttons python
我正在尝试遍历两个单选按钮,单击一个按钮获取一些详细信息,然后单击第二个按钮再次获取相同的详细信息。它点击了第一个,但我无法让它点击第二个。
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
radio.click()
"get some data"
print (radio)
“radio_button”的打印显示我正在取回我想要单击的两个不同元素。
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="70c7d3d9-5c3b-4939-a1ea-ccf1287adab5")>
“radio”的打印输出显示我两次取回第一个元素。
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
我做错了什么?非常感谢。
每次调用时,您将获得第一个元素的背靠背两倍:
radio = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
在这两次迭代中,第一个匹配元素,即第一个单选按钮被识别并被点击。
解决方案
您可以做如下小修改:
radio_buttons = wait.until(EC.visibility_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_buttons)
for radio in radio_buttons :
radio = wait.until(EC.element_to_be_clickable(radio))
radio.click()
print (radio)
你得到相同元素的原因是你正在迭代列表并寻找 xpath 它总是只返回第一个元素。
您需要使用索引来获取特定元素。
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio = wait.until(EC.visibility_of_element_located((By.XPATH,"(//input[@class='vfuk-Radio__input'])[{}+1]".format(radio))))
radio.click()
"get some data"
print (radio)
或者只使用列表[elementIndex]
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio =radio_button[radio]
radio.click()
"get some data"
print (radio)
我正在尝试遍历两个单选按钮,单击一个按钮获取一些详细信息,然后单击第二个按钮再次获取相同的详细信息。它点击了第一个,但我无法让它点击第二个。
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
radio.click()
"get some data"
print (radio)
“radio_button”的打印显示我正在取回我想要单击的两个不同元素。
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="70c7d3d9-5c3b-4939-a1ea-ccf1287adab5")>
“radio”的打印输出显示我两次取回第一个元素。
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
<selenium.webdriver.remote.webelement.WebElement (session="dda6abe5-88a7-419a-8cb8-ff7438739c62", element="aa9d00e5-06f2-4f64-ab6a-8382f13c0cf9")>
我做错了什么?非常感谢。
每次调用时,您将获得第一个元素的背靠背两倍:
radio = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
在这两次迭代中,第一个匹配元素,即第一个单选按钮被识别并被点击。
解决方案
您可以做如下小修改:
radio_buttons = wait.until(EC.visibility_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_buttons)
for radio in radio_buttons :
radio = wait.until(EC.element_to_be_clickable(radio))
radio.click()
print (radio)
你得到相同元素的原因是你正在迭代列表并寻找 xpath 它总是只返回第一个元素。
您需要使用索引来获取特定元素。
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio = wait.until(EC.visibility_of_element_located((By.XPATH,"(//input[@class='vfuk-Radio__input'])[{}+1]".format(radio))))
radio.click()
"get some data"
print (radio)
或者只使用列表[elementIndex]
radio_button = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//input[@class='vfuk-Radio__input']")))
print (radio_button)
for radio in range(len(radio_button)):
radio =radio_button[radio]
radio.click()
"get some data"
print (radio)