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)