Как получить данные из динамической таблицы - Селен Python - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь получить данные из динамической веб-таблицы в Селен-Питоне, но в консоли появляются ошибки, такие как ОШИБКА как "

values = self.driver.find_element_by_xpath(".//*[@id='table01']/tbody/tr["+row+"]/td["+col+"]").text

TypeError: должно быть str, а не int

FAILED (ошибки = 1)

class DynamicWebTable1(unittest.TestCase):


@classmethod
def setUpClass(cls):
    chrome_driver_path = os.path.abspath('..')  + "\\Drivers\\chromedriver.exe"

    cls.driver=webdriver.Chrome(chrome_driver_path)

    cls.driver.implicitly_wait(30)
    cls.driver.maximize_window()
    # navigate to the application home page
    cls.driver.get("http://qavalidation.com/demo/")

def test_get_table_data(self):
    time.sleep(10)
    columns = len(self.driver.find_elements_by_xpath(".//*[@id='table01']/tbody/tr[1]/td"))
    rows = len(self.driver.find_elements_by_xpath(".//*[@id='table01']/tbody/tr"))
    print("rows - ",rows)   # rows -  3
    print("columns - ",columns) #columns -  4

    for row in range(rows):
        for col in range(columns):
            values = self.driver.find_element_by_xpath(".//*[@id='table01']/tbody/tr["+row+"]/td["+col+"]").text
            print(" Dynamic web table index {row} ,{col} value is {values} ".format(row, col, values))

@classmethod
def tearDownClass(cls):
    # close the browser window
    cls.driver.quit()

Пример кода Github https://github.com/venkywarriors619/selenium_with_python/blob/master/Python_basics/SeleniumWebDriver_Advanced/DynamicWebTable1.py dynamic we table from http://qavalidation.com/demo/

dynamicмы стол от http://qavalidation.com/demo/

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Ожидается строковое значение, но вы передаете int значение.Это происходит, когда мы объединяем строку в целое число.Пожалуйста, измените следующую строку в вашем коде.

values = self.driver.find_element_by_xpath(".//*[@id='table01']/tbody/tr["+row+"]/td["+col+"]").text

на

values = self.driver.find_element_by_xpath(".//*[@id='table01']/tbody/tr["+str(row)+"]/td["+str(col)+"]").text

Это может решить вашу проблему.

0 голосов
/ 23 мая 2018

Это сообщение об ошибке ...

TypeError: must be str, not int

... подразумевает, что в то время как в указанной строке ваша программа ожидает тип аргумента String , где в качестве Interger тип аргумента был передан ему.

Чтобы извлечь данные из динамической веб-таблицы, вам нужно изменить строку кода следующим образом:

for row in range(rows):
    for col in range(columns):
        values = self.driver.find_element_by_xpath('.//*[@id="table01"]/tbody/tr["'+row+'"]/td["'+col+'"]').text
0 голосов
/ 23 мая 2018

Вы не можете добавить строку и целое число:

>>> "1"+2
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    "1"+2
TypeError: must be str, not int

Вы должны преобразовать int в стр:

>>> "1"+str(2)
'12'
...