Редактирование экспортированного тестового примера Selenium (python) для чтения данных из текстового файла

Я экспортировал тестовый пример и сохранил как.py файл. Я хочу отредактировать его для чтения данных из текстового файла в качестве входных данных для входа на веб-сайт, который я тестирую. Пример имени пользователя и пароля, который должен позволять вход в систему, - 1 и pwd1 соответственно. Но когда я читаю эти значения из файла, обращаясь к прочитанной первой строке, используя readlines(), он показывает сбой при входе в систему и неудачный тест. Когда я печатал размер соответствующей строки, читаемой readlines, его размер на 1 больше, чем должен быть. то есть размер =2, тогда как размер моего имени пользователя, 1, должен быть 1, я предполагаю. Нужна помощь в успешном выполнении этого теста. Вот мой код:

 # -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
import time

class A6Test2(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://localhost:8080"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_a6_test2(self):
        fh = open("cases.txt", "r")
        data=fh.readlines()
        uname1=data[1]
        pwd1=data[2]
        driver = self.driver
        driver.get(self.base_url + data[0])
        driver.find_element_by_name("p_id").clear()
        driver.find_element_by_name("p_id").send_keys(data[1])
        driver.find_element_by_name("p_passw").clear()
        driver.find_element_by_name("p_passw").send_keys(data[2])
        time.sleep(5)
        driver.find_element_by_xpath("(//input[@value='Submit'])[2]").click()
        time.sleep(3)
        driver.find_element_by_css_selector("input[type=\"SUBMIT\"]").click()
        driver.find_element_by_link_text(data[5]).click()
        driver.get(self.base_url + data[6])
        time.sleep(3)
        driver.find_element_by_name("p_id").clear()
        driver.find_element_by_name("p_id").send_keys(data[7])
        time.sleep(3)
        driver.find_element_by_name("p_passw").clear()
        driver.find_element_by_name("p_passw").send_keys(data[8])
        time.sleep(3)
        driver.find_element_by_xpath("(//input[@value='Submit'])[2]").click()
        time.sleep(3)
        driver.find_element_by_css_selector("input[type=\"SUBMIT\"]").click()
        driver.find_element_by_link_text(data[11]).click()

    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException as e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException as e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Мой case.txt выглядит следующим образом:

/source.jsp

1

pwd1

(// вход [@ = значение 'Submit'])[2]

входной [тип =\"ВВЕСТИ \"]

Выйти

/source.jsp

1

pwd1

(// вход [@ = значение 'Submit'])[2]

входной [тип =\"ВВЕСТИ \"]

Выйти

1 ответ

Решение

data можно рассматривать как двумерный массив. Попробуйте получить к нему доступ, используя 2 индекса. Например:

driver.get(self.base_url + "/source.jsp")
driver.find_element_by_name("d_id").clear()
driver.find_element_by_name("d_id").send_keys(data[0][0:3])
driver.find_element_by_name("d_passw").clear()
driver.find_element_by_name("d_passw").send_keys(data[1][0:5])

Выше предполагаются некоторые фиксированные длины вашего идентификатора и пароля.

Но если вы не хотите давать предопределенные значения, такие как 3 и 5, как описано выше, попробуйте использовать функцию длины.

Другие вопросы по тегам