【问题标题】:How to click button available in dynamic web table using Selenium and Python如何使用 Selenium 和 Python 单击动态 Web 表中可用的按钮
【发布时间】:2020-05-22 10:08:47
【问题描述】:

我是 Selenium 的新手,我已经浏览了网站教程 https://www.guru99.com/handling-dynamic-selenium-webdriver.html 以了解如何获取 Web 表的行数和列数。

但是在我们的网站测试中,我们需要做一些更高级的操作。 web表类似于演示网站http://demo.guru99.com/test/web-table-element.php

问题:

  1. 我的表格行值将是动态的,例如第一次加载(“BEML Ltd. A 253.1 327.4 + 3.7”)行号将是第 6 位。可能下次该行将显示在第 10 位,因为要添加更多行。
  2. 现在如何从第三列(“Previous close RS”)中找到特定值,例如“253.1”?
  3. 根据匹配值,我必须单击第一列中可用的相应按钮(例如“BEML Ltd” - 网站链接)。演示网站在第一列中只有一个链接。但是我的测试网站有三个按钮:Hold、Close、Open。​​

我已尝试使用以下代码,但无法单击并导航到相应的屏幕。

   try:
            WebDriverWait(self.driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, 'td')))
            table= self.driver.find_element(By.ID, 'TableGrid')
            trs = table.find_elements_by_tag_name('tr')
            for tr in trs:
                tds = tr.find_elements_by_tag_name('td')
                for td in tds:
                    match_obj = re.search('searching Text', td.text)
                    print(match_obj)
                    if match_obj and match_obj.group(1) == '0':
                        success_button = tr.find_element_by_css_selector('button.btn-success')
                        print(success_button.get_attribute('type'))
                        success_button.click()
        except :
              pass

OK.simply 我问的是如何匹配动态增长网络表中任何列中的特定值(行索引不固定)并单击第一列特定行中可用的按钮?

【问题讨论】:

标签: python selenium selenium-webdriver xpath


【解决方案1】:
try:
    WebDriverWait(self.driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, 'td')))
    table= self.driver.find_element(By.ID, 'TableGrid')
    trs = table.find_elements_by_tag_name('tr')
    row_count = 0
    matched_row_count = 0
    for tr in trs:
        tds = tr.find_elements_by_tag_name('td')
        time.sleep(2)
        for i, td in enumerate(tds):
            # This for loop will iterate single row value. Here i is index value 
            if i == 1 and td.text == 'required matching column value':
               #print("Matched {}: {}".format(i, td.text))
               matched_row_count = row_count
               print("matched_row_count :",matched_row_count)
        row_count = row_count+1
        # will print all the column name  #//*[@id="TableGrid"]/div[1]/table/tbody/tr[4]/td[1]/a[3]
            # tr[4] -row [td1]-column a[3]-button
except :
      print("could not found the column details")

element = self.driver.find_element(By.CSS_SELECTOR, "tr:nth-child("+matched_row_count+")"+" "+".btn-info")
actions = ActionChains(self.driver)
actions.move_to_element(element).perform()
element = self.driver.find_element(By.CSS_SELECTOR, "body")
actions = ActionChains(self.driver)
actions.move_to_element(element).perform()
self.driver.find_element(By.CSS_SELECTOR,  "tr:nth-child("+matched_row_count+")"+" "+".btn-info").click()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 2016-08-24
    • 2018-08-22
    • 1970-01-01
    • 2019-09-01
    • 2021-11-27
    • 2016-12-31
    • 2021-04-07
    相关资源
    最近更新 更多