簡體   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