Ваше требование не использовать xpath кажется очень ограничительным, так как это, безусловно, лучший метод для вашего случая использования, главным образом потому, что определение местоположения на основе css не позволяет вам выполнять точное сопоставление с текстом тега , в ваше дело название <td>
с.
Для достижения этой цели с помощью CSS вы должны будете использовать некоторые потенциально ненадежные цепочечные локаторы, такие как
element(by.cssContainingText('tr','test')).element(by.css('button'));
Я говорю ненадежно, так как этот локатор фактически идентифицирует все три ваши кнопки из-за того, что все три вашего заголовка тега содержат символы «тест». Это работает в этом случае, но может вызвать проблемы в ваших реальных тестах.
Я бы серьезно рекомендовал отменить требование отсутствия xpath и перейти к следующему братскому ответу, предоставленному Пеком, поскольку это будет наиболее надежный долгосрочный период.
Используйте переключатель командной строки -u
, чтобы заставить Python 2 обрабатывать stdin, stdout и stderr как двоичные небуферизованные потоки.
C:> type mydoc.txt | python.exe -u myscript.py
Вот окончательный вариант кода, совместимого с Linux / Windows Python 2/3, для чтения данных из стандартного ввода без искажений:
import sys
PY3K = sys.version_info >= (3, 0)
if PY3K:
source = sys.stdin.buffer
else:
# Python 2 on Windows opens sys.stdin in text mode, and
# binary data that read from it becomes corrupted on \r\n
if sys.platform == "win32":
# set sys.stdin to binary mode
import os, msvcrt
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
source = sys.stdin
b = source.read()
Вы можете выполнить небуферизованное чтение с помощью:
os.read(0, bytes_to_read)
, где 0 - дескриптор файла для stdin
import sys
data = sys.stdin.read(10) # Read 10 bytes from stdin
Если вам нужно интерпретировать двоичные данные, используйте модуль struct
.