Метод проходит две стриницы, на одной нужный элемент можно найти по
var navigationElements = driver.FindElements(By.XPath("//li[@class=‘selected’]//a"));
на другой странице нужно взять элемент по такому:
var navigationElements = driver.FindElements(By.XPath(".//*[@class=‘headline’]"));
Как написать правильно переключатель чтобы не вылетал эксепшн?
Помогите пожалуйста
пробовал, после try/catch стоит переменная category, которая использует navigationElements из блока try
var category = UppercaseWords(navigationElements[0].Text.ToLower());
оно светится красным и не может сослаться на содержимое блока try
решение довольно спорное использовать try catch - семантика данного механизма нужна чтобы обрабатывать ситуации исключительные, которые не должны возникнуть при нормальном функционировании программы. А вы вполне себе ожидаете что на 2 разных страницах элемент будет найден по 2ум разным локаторам. Инкапсулируйте разные локаторы в самих объектах страниц и используйте полиморфизм для получения элементов. Например,
Class A:
def findNavigationElements():
return navigationElements = driver.FindElements(By.XPath("//li[@class=‘selected’]//a"));
Class B:
def findNavigationElements():
navigationElements = driver.FindElements(By.XPath(".//*[@class=‘headline’]"));
Решил свою проблему добавлением текстового поля, в которое записываю XPATH в зависимости от страницы
string categoryPath = "";
//Jackpots page doesnt has menu, and we need to find category from Headline (comment from below)
if (driver.Url.ToString() == "https://www.caesarscasino.com/en/all-games/jackpots")
{
categoryPath = ".//*[@class='headline']";
}
else
{
categoryPath = "//li[@class='selected']//a";
}
var navigationElement = driver.FindElement(By.XPath(categoryPath));
ИМХО более корректный вариант использовать Page Object. Почитайте на эту тему.
Ваш код в тесте тогда будет выглядеть где-то так:
myPage1.navigationElements.
…
myPage2.navigationElements.something
…
class myPage2 extends Page { @FindBy (xpath, “.//*[@class=‘headline’]”)
pageElement navigationElements
}
То решение, которое есть у Вас, при увеличении количества тестов превратится в maintenance hell. Представьте себе, что у Вас добавляется 3-я страница, на которой есть navigationElements. Вам придётся переписывать логику теста при расширении функциональности. Это очень плохой путь. Пока не поздно - исправляйтесь Я так понимаю, Ваши автотесты находятся в начале своего развития.