суббота, 23 мая 2020 г.

Тип данных - Словарь (Dictionary)

Иногда обычного списка недостаточно.
Например мы имеем список с оценками студентов за экзамен

student_grades = [12, 5, 6, 10, 11, 10, 9, 8, 7]

Но имея этот список мы не знаем какой студент получил какую оценку. Чтобы привязать имя студента к оценке, мы используем Dictionary (Словарь):

student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}


Marie - это ключ (key)
12 - это значение (value)


МЕТОД 1 - VALUES()

Используется, чтобы получить значения (value) из словаря (dictionary).

student_grades.values()

Получаем список только из значений:
dict_values = ([12, 5, 6, 10, 11])

Если нам нужно посчитать СРЕДНЮЮ оценку

sum = sum(student_grades.values())

length = len(student_grades)

average = sum/length

print(average)


МЕТОД 2 - KEYS()


student_grades.keys()

dict_keys = (['Marie', 'John', 'Max', 'Michael', 'Anna'])



Все методы, которые мы можем использовать с переменной


['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']


class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)
 |  
 |  Built-in subclasses:
 |      StgDict
 |  
 |  Methods defined here:
 |  
 |  __contains__(self, key, /)
 |      True if the dictionary has the specified key, else False.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __init__(self, /, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  __ior__(self, value, /)
 |      Return self|=value.
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __or__(self, value, /)
 |      Return self|value.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __reversed__(self, /)
 |      Return a reverse iterator over the dict keys.
 |  
 |  __ror__(self, value, /)
 |      Return value|self.
 |  
 |  __setitem__(self, key, value, /)
 |      Set self[key] to value.
 |  
 |  __sizeof__(...)
 |      D.__sizeof__() -> size of D in memory, in bytes
 |  
 |  clear(...)
 |      D.clear() -> None.  Remove all items from D.
 |  
 |  copy(...)
 |      D.copy() -> a shallow copy of D
 |  
 |  get(self, key, default=None, /)
 |      Return the value for key if key is in the dictionary, else default.

Пример

Вывести оценку определенного студента


student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}

marie_grade = student_grades.get("Marie")

print(marie_grade)



 |  
 |  items(...)
 |      D.items() -> a set-like object providing a view on D's items
 |  
 |  keys(...)
 |      D.keys() -> a set-like object providing a view on D's keys
 |  
 |  pop(...)
 |      D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
 |      
 |      If key is not found, default is returned if given, otherwise KeyError is raised
 |  
 |  popitem(self, /)
 |      Remove and return a (key, value) pair as a 2-tuple.
 |      
 |      Pairs are returned in LIFO (last-in, first-out) order.
 |      Raises KeyError if the dict is empty.
 |  
 |  setdefault(self, key, default=None, /)
 |      Insert key with a value of default if key is not in the dictionary.
 |      
 |      Return the value for key if key is in the dictionary, else default.
 |  
 |  update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
 |      If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
 |      In either case, this is followed by: for k in F:  D[k] = F[k]
 |  
 |  values(...)
 |      D.values() -> an object providing a view on D's values
 |  
 |  ----------------------------------------------------------------------
 |  Class methods defined here:
 |  
 |  __class_getitem__(...) from builtins.type
 |      See PEP 585
 |  
 |  fromkeys(iterable, value=None, /) from builtins.type
 |      Create a new dictionary with keys from iterable and values set to value.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None



Посчитать сколько раз элемент встречается в списке

Например, нам надо посчитать сколько студентов с балом 10 в списке.

student_grades list содержит оценки студентов за экзамер.

Функция COUNT() считает сколько раз определенный элемент попадается в списке.




student_grades = [9.1, 8.8, 10.0, 7.7, 6.8, 8.0, 10.0, 8.1, 10.0, 9.9]
n = student_grades.count(10.0)
print(n)

Результат:
3

четверг, 21 мая 2020 г.

Как проверить что определенные страницы сайта не видны поисковикам

Запрет для поисковых систем

Эта проверка нужна тогда, когда появляются, например, временные страницы на сайте или страницы, которые не должны быть видны поисковым системам.

открываем файл
robots.txt

Для этого в строке браузера пишем

my_website.com/robots.txt


Allow - это ссылки на страницы, которые разрешено отслеживать поисковым системам.
Disallow - запрещенные для поиска в поисковых системах старнички сайта.

среда, 20 мая 2020 г.

Как создавать маркеры и использовать их чтобы запускать только определенные тесты



В  Pytest есть возможность ставить маркеры на отдельные тесты (они могут быть в одном файле или в разных). 

Это позволит:

  • запускать тесты только с определенным маркером.
  • пропускать тесты с определенным маркером.


ПРИМЕР 1


Нам надо создать список тестов, которые будут запускаться ежедневно - Smoke tests.
import pytest
@pytest.mark.smoke
def test_user_should_see_icon_on_homepages(driver):
    homepage.open(driver)
    assert homepage.is_icon_displayed(driver), "The icon is not displayed on Homepage"

Вначале мы импортируем pytest
import pytest
Добавляем маркер с именем smoke перед каждым тестом, который нужно запускать каждый день.
@pytest.mark.smoke
Чтобы запустить только тесты с маркером smoke, в Терминале вводим:
pytest -v -m smoke
Если нужно, чтобы запустились все тесты, кроме Smoke
pytest -v -m "not smoke"
Можно выбрать только тесты, которые в своем названии содержат определенное слово (например "color") - запустятся только эти тесты.
pytest -v -k color
Чтобы запусить все тесты, которые в названии не содержат ключевое слово "color", вводим такой текст:
pytest -k "not color" -v
Можно запустить тесты по двум ключевым словам. Например, запускаем тесты, названия которых содержат слова "color" и "hover" (запустятся все 
тесты, которые содержат хотя бы одно из ключевых слов).
pytest -k "color or hover" -v

ПРИМЕР 2

Нужно исключить прогонку тестов для Windows, то есть тех тестов, которые нужно проверять только на Винде.
@pytest.mark.skipif(pytest.mark._config.getoption('os') == 'mac', reason='This test is for Windows only')
Добавляя такую строку перед тестом, мы добавляем маркер skipif (пропускать если).
Тест будет пропускаться, если выбранная для тестирования операционная система Mac
(('os') == 'mac')
Также можно установить маркер для сразу для нескольких функций, присвоих их определенному классу. В этом случае маркер ставится на класс.
import pytest


@pytest.mark.webtest
class TestClass:
    def test_startup(self):
        pass

    def test_startup_and_more(self):
        pass

ПРИМЕР 3



Если нужно полностью пропустить данный тест (заскипать)
@pytest.mark.skip(reason='Temporary skipped because of ticket FF-382')

вторник, 19 мая 2020 г.

Как увеличить окно при прогонке теста (Maximize Window), Python

Иногда для теста обязательным является то, чтобы окно открывалось на весь экран (так как по умолчанию оно может быть меньше необходимого).
Я столкнулась с тем,  что по умолчанию при прогонкке теста через BrowserStack размер открываемого окна 1024x768. Это размер экрана планшета. Для моего теста это не подходило, так как верхнее меню для десктопа и для планшета отображалось по-разному.

Десктоп (Desktop):

Для таблетки отображалось гамбургер-меню и при попытке найти главное меню на странице, тест падал.

Планшет (Tablet):


Для того, чтобы решить эту проблему, после перехода на нужную страницу, нужно изменить размер окна на максимальный. Для этого используем функцию maximize_window.


driver.maximize_window()

Через какое-то время у меня возникла проблема, что при запуске через BrowserStack, окно не всегда становится максимальным, и разные тесты падали время от времени (каждый раз разные).

Поэтому я прибегла к другой функции, которая задает фиксированный размер экрана для теста - set_window_size.

driver.set_window_size(1920, 1080)

суббота, 16 мая 2020 г.

Как посчитать среднее значение в списке List



Предположим, мы имеем список с баллами студентов от 1 до 12 в списке list.

student_grades = [12, 10, 11, 12, 10, 8, 11, 12, 7, 11]

Нужно посчитать среднее значение оценок студентов.

Для этого сначала считаем сумму всех оценок студентов:
sum = sum(student_grades)

Считаем количство элементов (студентов) в списке:
quantity = len(student_grades)


Чтобы найти среднее значение sum делим на quantity.

____________________

student_grades = [12, 10, 11, 12, 10, 8, 11, 12, 7, 11]

sum = sum(student_grades)
quantity = len(student_grades)

average = sum/quantity

print(average)
_________



Запускаем файл через Терминал
python3.7 my_folder/my_file.py

Результат:
10.4





Функции в Python. Как просмотреть весь список доступных функций и переменных.

Чтобы вывести на экран список всех доступных функций и переменных, в Терминале набираем:

>>> dir(__builtins__)

Результат:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

Мы видим тут кроме функций и все типы переменных -  О типах переменных читайте ТУТ

четверг, 14 мая 2020 г.

Методы для всех типов данных. Как посмотреть весь набор методов. Примеры использования

Итак, есть 6 основных типов дынных:
- string,
- integer,
- float,
- boolean,
- list,
- dictionary,
- tuple.

Чтобы посмотреть все методы, которые мы можем применить к определенному типу данных, в командной строке набираем:


dir (str)


Результат:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']


  • capitalize - делает первую букву заглавной


>>> str.capitalize("hello")
или
>>> "hello".capitalize()

Результат:   'Hello'


  • title - делает первую букву заглавной (по сути тоже самое, что и capitalize)


>>> str.title('hello')
Результат:   'Hello'



  • upper - пишет все слово заглавными буквами


>>> str.upper('hello')
>>> 'hello'.upper()

Результат:   'HELLO'

  • lower - пишет все слово маленькими буквами
username = "Python3"
lower = username.lower()
print(lower)


Пример с count - тут



dir(int)


['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']


dir(float)


['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']


dir(list)


['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

append - Добавить элемент в список

Пример с count - тут


dir (dict)  - Dictionary


['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']



dir(tuple


Help on class tuple in module builtins:

class tuple(object)
 |  tuple(iterable=(), /) 
 |  
 |  Built-in immutable sequence.  - Не может быть изменен
 |  
 |  If no argument is given, the constructor returns an empty tuple.
 |  If iterable is specified the tuple is initialized from iterable's items.
 |  
 |  If the argument is a tuple, the return value is the same object.
 |  
 |  Methods defined here:
 |  
 |  __add__(self, value, /)
 |      Return self+value.
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(self, key, /)
 |      Return self[key].
 |  
 |  __getnewargs__(self, /)
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __hash__(self, /)
 |      Return hash(self).
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __mul__(self, value, /)
 |      Return self*value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __rmul__(self, value, /)
 |      Return value*self.
 |  
 |  count(self, value, /)
 |      Return number of occurrences of value.
 |  
 |  index(self, value, start=0, stop=9223372036854775807, /)
 |      Return first index of value.
 |      
 |      Raises ValueError if the value is not present.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.




понедельник, 11 мая 2020 г.

Типы переменных в Python - String, Integer, Float, Boolean, List, Dictionary, Tuple.

Существуют несколько типов переменных в Пайтон:

1.

STRING (str)

- Это строка. Чтобы задать этот тип, нужно данные взять в ковычки (не важно одинарные или двойные)
a = "text"

dir(str) - Чтобы вывести весь список доступных для данного типа данных функций.

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']



2.

INTEGER (int)

- Целое число. Задается без ковычек.
b = 10

dir(int)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']



3.

FLOAT

- Это дробное число. Задается без ковычек с точкой.
c = 10.2

dir(float)

['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']


4.

BOOLEAN (bool) 

- Значение этой переменной может быть только TRUE или FALSE.
d = True

dir(bool)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']


5.

LIST [Список] 

mutable (может быть изменен) в отличии от Tuple.

- это список переменных. Он может содержать любое количество переменных разного типа (в примере 4 переменные разного типа).
list = [10, 10.4, "text", "24759"]

List также может содержать другой list
list = [0, 10.4, "text", [8, 'efhe']]

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']


RANGE 

- эта функция позволяет создать список с указанным диапазомом.
list(range(1, 6))
Это то же самое, что:
[1, 2, 3, 4, 5]
Обратите внимание, что 6 не попадает в список!

Можно указать еще ШАГ в качестве третьего аргумента
list(range(1, 6, 2))
[1, 3, 5]
то есть это все числа в переделах диапазона с 1 до 5 с шагом 2


При необходимости, можно изменить тип переменной в программе.
Например, программа-калькулятор запрашивает числа, чтобы потом выполнить действия с ними... Для этого мы будет использовать функцию INPUT, но она воспринимает всегда данные как строку.

a = input("Введите число A")
b = input("Введите число B")

Предположим пользователь указал a = 5, b = 3.
Пользователь вводит числa. Но если мы сложим их сейчас, то получим:
c = a + b = 53

Потому что 5 и 3 - это текст.

Чтобы в программе переделать текст на числа, добавляем нужный нам формат - float или integer.

a = float (input ("Введите число A:   "))
b = float (input ("Введите число B:   "))
c = a + b
print ("Результат = " + str(c))

Результат нам надо было переделать обратно в строку для печати. Поэтому в функции print - указываем - str(c)


APPEND - Добавляет 1 элемент в список

list = [10, 10.4, "text", "24759"]
list.append(1)
print(list)
Результат
[10, 10.4, 'text', '24759', 1]

MAX - Найти максимальное значение в списке

student_grades = [9.1, 8.8, 7.5]

max_value = max(student_grades) print(max_value)

Результат:
9.1



6.

DICTIONARY (dict) {Словарь}


student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}

Про словари можете почитать в СТАТЬЕ.

Словарь может содержать внутри себя любые элементы. 
Пример - Словарь содержит 3 переменные с кортежем данных для каждого времени суток).

day_temperatures = {'morning':(1.3, 2.1, 3.0), 'noon':(19.6, 34.4, 1.2), 'evening':(2.3, 4.4, 4.7)}

dir(dict)

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']



7.

TUPLE (Кортеж) 

- immutable в отличии от List.
Это значит, что кортеж не может быть изменен (не может мутировать)

temperature = (10, 24, 5, 19, 2)

Кортеж может содержать внутри себя любые другие переменные.
color_codes = (("green", "red", "white"), (1,2), (3974, "uougo"))  
-  Кортеж содержит внутри себя 3 других кортежа

dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']


HELP


Можно почитать документацию по командам или переменным в Python, используя HELP

help(str) 

help(str.replace) 

replace(self, old, new, count=-1, /)
    Return a copy with all occurrences of substring old replaced by new.
    
      count
        Maximum number of occurrences to replace.
        -1 (the default value) means replace all occurrences.

help(dict.values)

values(...)
    D.values() -> an object providing a view on D's values



воскресенье, 10 мая 2020 г.

Функция PRINT для вывода текста или результата. Вывод даты и времени.

Задача:

Нужно вывести на экран текущую дату и время с дополнительным поясняющим текстом.


import datetime


result = datetime.datetime.now()
print("The date and time is ", result)




  • в терминале запускаем файл

python3.7 examples.py


  • и видим результат (в Терминале)

The date and time is  2020-05-11 13:08:42.621462


В PyCharm файл можно запустить и по-другому:

  1. Правой кнопкой мыши кликаем на название файла в боковой панель
  2. Run "examples"
3. Получаем результат в Терминале

Написать XPATH для нахождения родительского элемента



XPATH к элементу div через его child

//select[@name='category']/..



Элемент определяем так:

locator = (By.XPATH, "//select[@name='category']/..")
element = HtmlElement(driver, locator)
Предположим мы должны проверить видимоcть этого эелемента:
return hero_subtitle.is_element_visible()

Итого, функция будет выглядеть так:

@allure.step("Check that element is visible") def is_element_visisble(driver): locator = (By.XPATH, "//select[@name='category']/..") element = HtmlElement(driver, locator) return element.is_element_visible()


Описываем класс HtmlElement (лучше в отдельном файле и использовать его в разных тестах):

class HtmlElement:
    def __init__(self, driver, locator):
        self.driver = driver  # type: WebDriver        self.element_locator = locator


    def is_element_visible(self, timeout=30):
        wait = WebDriverWait(self.driver, timeout)
        try:
            wait.until(expected_conditions.visibility_of_element_located(self.element_locator))
        except TimeoutException:
            return False        return True
ПРИМЕР 2
//a[text()='Sm___']/..//a[text()='Get Started']



Чтобы найти кнопку Get Started описываем сначала a с текстом "Sm...". (//a[text()='Sm___'])
Дальше переходим вверх к родительскому элементу (/..).
Спускаемся вниз к дочернему элементу с текстом 'Get Started' (//a[text()='Get Started'])

суббота, 9 мая 2020 г.

Фикстура, которая будет применяться для всего модуля. Python



@pytest.fixture(scope='module')
 def driver_es(request):
      browser = request.config.getoption("--browser")
      os = request.config.getoption("--os")
      test_name = request.node.name
      driver = get_driver_for(browser, os, test_name, 'es')
      request.session.driver = driver


 def close():
     request.session.driver = None
     driver.quit()

request.addfinalizer(close)
return driver




По умолчанию - scope='function'
Это значит, что драйвер созается для каждой функции, открывается браузер, 
запускается тест, после завершения теста - браузер закрывается.  

Если указать - scope='module'
То браузер открывается, прогоняются все тесты из модуля (файла) и только 
после этого браузер закрывается.

Как запустить Python через Terminal на MAC используя PyCharm или Visual Studio Code

Чтобы начать работу на Python в терминале, нужно для начала запустить его.
Для написания программ я использую PyCharm, но также покажу пример на Visual Studio Code.

в PyCharm:


1. Открываем Терминал (Terminal в нижней панели)
Contol + Space на Маке - и там набираем Terminal


2.  Пишем чтобы запустить оболочку Пайтон (Python shell)

py -3.9 (Windows)

python3.9 (Mac and Linux)



Это чтобы запустить файл PYTHON

python3.9 file_name.py (Mac and Linux)


py -3.9 file_name.py (Windows)




3. Enter

4. Если видим ">>>",  значит Python запущен и вы внутри Python interactive shell. Здесь вы можете писать код и сразу его выполнять, видя результат

>>> 2 * 3
6

exit()   #Чтобы выйти из Python Shell


В Visual Studio Code:


1. Создаем новый документ

2. Кликаем Terminal - New Terminal в верхнем меню


3. Дальше идем по тем же пунктам 2-4 как в PyCharm...




Чтобы закрыть Python, пишем:

exit()


Если в Терминале не запускать эту интерактивную оболочку, то тут можно запускать код из файла:

python3.7 tests 

запустятся все файлы из папки tetsts

python3.7 tests/test_example.py

запустится файл из папки tests с именем test_example.py





Очень полезная подсказка - Если начать писать имя файла, и нажать TAB, то PyCharm напишет продолжение за вас, если существует только один вариант!




четверг, 7 мая 2020 г.

"\" (Backslash) - его некоторые полезные функции в Python


Обрытный слэш поможет в следующих ситуациях:

1.

Нужно использовать " или ' или \ как часть текста   \' , \" , \\


Пример:

category_locator = (
    By.XPATH,
    '//h2[text()="The New Story \"To Be Here\""]')

Результат:
Будет найден h2 элемент с текстом The New Story "To Be Here".


2. 

Текст надо разделить на 2 строки - \n



Пример:

print("The New Story \n To Be Here"]')

Результат:
Будет напечатан текст 
The New Story
To Be Here

Самые полезные ФУНКЦИИ Пайтона

 1)  PRINT - выводит на печать переменную, указанную в скобках print (average)   2)  LEN - посчитать количество элементов в списке student...