【问题标题】:How to efficiently iterate variable number in Selenium Webdriver using Python?如何使用 Python 在 Selenium Webdriver 中有效地迭代变量号?
【发布时间】:2014-07-23 13:12:25
【问题描述】:

我在 IE 上使用 selenium webdriver 和 Python,下面提到的代码运行良好,但我需要循环执行。 请建议。 termsName0 可以是 2 ,3 4 或 N 个数字

代码:

Select(self.driver.find_element_by_name("termsName0")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName1")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName3")).select_by_visible_text("Blank No Text")

【问题讨论】:

    标签: python selenium loops


    【解决方案1】:

    如果你不知道“N”,你可以使用 try except contract。

    from selenium.common.exceptions import ElementNotVisibleException, WebDriverException, NoSuchElementException
    
    try:
        i = 0
        while True:
            name = "termsName" + str(i)
            Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")
            i +=1
     except (ElementNotVisibleException, WebDriverException, NoSuchElementException):
            pass
    

    【讨论】:

      【解决方案2】:

      这是一种方式。 N 指定要循环多少次

      N = 4
      
      for i in range(N):
          name = "termsName" + str(i)
          Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")
      

      基本上,它获取当前迭代的次数并将其附加到"termsName"

      以上代码等价于

      Select(self.driver.find_element_by_name("termsName0")).select_by_visible_text("Blank No Text")
      Select(self.driver.find_element_by_name("termsName1")).select_by_visible_text("Blank No Text")
      Select(self.driver.find_element_by_name("termsName2")).select_by_visible_text("Blank No Text")
      Select(self.driver.find_element_by_name("termsName3")).select_by_visible_text("Blank No Text")
      

      【讨论】:

      • 感谢您的快速回复,但我不知道 N = 4 ,这可能会在 UI 上发生变化,有时 1 有时 6 。在这种情况下,如果我定义了 N =4,那么上面的代码将失败。
      • @user3702349 N是怎么获取的?您可以更改 N。您只需将 N 设置为等于从 UI 获得的数字
      • 实际上在我的页面上 N 的值会有所不同。
      • @user3702349 我知道。您有一段代码可以从 ui 中获取 N 的值?您需要将 N 分配给该值
      • 上次查询:实际上在我的页面上 N 的值会有所不同。是否可以先检查termsname,然后取出N的值,然后使用Loop。
      【解决方案3】:

      要迭代可变数量的项目,您可以尝试这样的方法

      #To fetch all elements start with termsName 
      element_list = firefox_driver.find_elements_by_id("termsName[0-9]*")
      
      # below code will iterate over the all links
      for i in range(len(element_list)):
              name = "termsName" + str(i)
              Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多