繁体   English   中英

在 xpath 中使用变量 Python Selenium

[英]Using a variable in xpath in Python Selenium

我一直无法弄清楚如何让变量工作 Selenium。这篇文章似乎有所帮助( 变量在括号内不起作用)但我仍然无法让它工作。

当我使用它的实际值时。 在这种情况下,阿拉巴马州。 我创建了一个名为 state 的变量,这样我就可以在我的 function 中调用它。我有 13 个状态要运行。

driver.find_element_by_xpath("//option[@value='AL-Alabama']").click()

这个使用 state 变量,在查看错误消息时它显示变量值为 AL-Alabama。 所以它似乎在 web 页面中引用了正确的值。 不确定我遗漏了什么或为什么它不起作用。 任何指导将不胜感激。

driver.find_element_by_xpath('//option[@value=' + state + ']').click()
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//option[@value=AL-Alabama]"}

值周围的单引号不存在于您的编码方式中。 尝试:

driver.find_element_by_xpath("//option[@value='" + state + "']").click()

要使用Selenium在元素上针对<option>标记的变量value属性click() ,您可以使用以下任一定位器策略

  • XPATH使用变量:

     state = 'AL-Alabama' driver.find_element_by_xpath("//option[@value='" +state+ "']").click()
  • XPATH使用%s

     state = 'AL-Alabama' driver.find_element_by_xpath("//option[@value='%s']"% str(state)).click()
  • XPATH使用format()

     state = 'AL-Alabama' driver.find_element_by_xpath("//option[@value='{}']".format(str(state))).click()

最佳实践

理想情况下。 使用Selenium]相对于<option>标签的变量value属性在元素上click()并且您需要为element_to_be_clickable()引入WebDriverWait并且您可以使用以下任一定位器策略

  • XPATH使用变量:

     state = 'AL-Alabama' WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='" +state+ "']"))).click()
  • XPATH使用%s

     state = 'AL-Alabama' WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='%s']"% str(state)))).click()
  • XPATH使用format()

     state = 'AL-Alabama' WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='{}']".format(str(state))))).click()
  • 注意:您必须添加以下导入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

参考

您可以在以下位置找到一些相关讨论:

如果您仍然想使用单引号,那么您也可以尝试这个答案。 检查它是否有帮助:

driver.find_element_by_xpath('//option[@value=\'{State_Name}\']'.format(State_Name=State)).click()

或者干脆

driver.find_element_by_xpath('//option[@value=\'{}\']'.format(State)).click()

您可以在函数中将“状态”作为参数传递。

一种简单的方法是使用格式字符串“f”并在 {} driver.find_element_by_xpath(f"//List[@AutomationId=\"TileGridView\"]//ListItem[@ClassName=\"GridViewItem\"][@Name=\"{variable_name}\"]....")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM