Как указано в других ответах, ваша ошибка возникает из расчета длины вашего ввода в начале, а затем не обновляя его, когда вы сокращаете список.
Вот еще одно взятие в рабочем решении:
with open('toy.txt', 'r') as infile:
input_lines = reversed(map(lambda s: s.strip(), infile.readlines()))
output = []
for pattern in input_lines:
if len(output) == 0 or not output[-1].startswith(pattern):
output.append(pattern)
print('\n'.join(reversed(output)))
Проблема в том, что когда вы запускаете класс Test и вызывается @AfterMethod
, он пытается выйти из драйвера, принадлежащего верхнему классу, но не из классов, которые создаются в методах. Вот небольшой пример для лучшего понимания:
Класс теста JUnit:
import org.junit.Test;
import org.junit.After;
public class intTestClass extends Methods{
@Test
public void test1() throws InterruptedException {
intTestClass object1;
object1 = new intTestClass();
object1.setInt();
}
@After
public void tearDown() {
System.out.println("testInt is: "+ testInt);
}
}
И класс Methods:
public class Methods {
public int testInt = 0;
public void setInt() {
testInt = 1;
}
}
Здесь, когда вы запускаете тест JUnit вы ожидаете, что значение testInt
будет напечатано как 1. Однако метод с аннотацией @After(@AfterMethod for testng)
проверяет значение переменной testInt
, которая относится к верхнему уровню intTestClass, а не чем intTestClass , который создается внутри метода test1()
.
Таким образом, мы видим вывод:
testInt is: 0
Если мы применим это к вашему сценарию, вам нужно будет переместить ваш метод launchBrowser()
в ваш тестовый класс и вызвать метод с @BeforeClass
аннотация.