如何使用python和selenium使用与单选按钮相关的文本查找单选按钮的元素?

时间:2017-11-02 10:22:34

标签: python selenium automation

我正在尝试编写一个代码,我可以用它来自动化每年必须完成的培训课程。它是年复一年的相同材料和相同的培训,所以我想为什么不自动化它。

我遇到的部分是单击一个单选按钮。我可以通过xpath使用find元素来选择单选按钮,但由于答案是随机的,我希望通过与单选按钮相关的文本找到元素。我尝试使用find_element_by_partial_link但没有运气,我也可能做错了。这就是我的尝试:

test = browser.find_element_by_partial_link_text('Is this achievable?').

以下是我要访问的元素:

<label for="q1789110:1_answer0" style="background-color: rgb(234, 114, 0);" id="yui_3_17_2_3_1509578998475_118">Is this achievable?</label>

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

如果这是你的元素:

<script>
function myFunction() {
    alert("Hello!")
}
</script>


<label for="q1789110:1_answer0" style="background-color: rgb(234, 114, 0);" id="yui_3_17_2_3_1509578998475_118" onclick="myFunction()">Is this achievable?</label>

并且您想使用xpath,您可以将{和"text()"使用和条件:

driver.find_element_by_xpath("//label[@id='yui_3_17_2_3_1509578998475_118' and text()='Is this achievable?']").click()

修改

如果ID更改,您只需检查文本值:

driver.find_element_by_xpath("//label[text()='Is this achievable?']").click()

答案 1 :(得分:0)

如果您的HTML代码看起来像这样

<form action="/action_page.php">
  <label for="male">Male</label>
  <input type="radio" name="gender" id="male" value="male"><br>
  <label for="female">Female</label>
  <input type="radio" name="gender" id="female" value="female"><br>
  <label for="other">Other</label>
  <input type="radio" name="gender" id="other" value="other"><br><br>
  <input type="submit" value="Submit">
</form>

您可以先使用xpath来查找使用文本的标签节点,然后让它获取&#39;对于&#39;属性:

for_attr = driver.find_element_by_xpath("//label[text()='Male']").get_attribute("for")

然后你可以找到输入元素以便点击它:

通过xpath

driver.find_element_by_xpath("//input[@type='radio' and @id='%s']" % (for_attr)).click()

或通过id

driver.find_element_by_id(for_attr).click()

The for attribute of the label tag should be equal to the id attribute of the related element to bind them together.