Сделайте код селена с большим количеством XPath-ов более читабельным
Я заметил, что когда я использую веб-драйвер селена для взаимодействия с элементами на веб-странице, мой код становится недоступным для чтения, потому что я использую много XPath-ов, чтобы найти эти элементы. Например:
driver.FindElement(By.XPath("//div[@class='login']//a[@href='#']"), Globals.TIMEOUT).Click();
var loginField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_name']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + login + "')", loginField);
var passwordField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_password']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + password + "')", passwordField);
driver.FindElement(By.XPath("//div[@id='login_box']//input[@type='submit']")).Click();
driver.FindElement(By.XPath("//div[@class='nameuser']"), Globals.TIMEOUT);
Я думал, что могу поместить значения XPath в константы, но очень полезно видеть фактический XPath элемента при чтении кода. Но с другой стороны, когда XPath какого-либо объекта изменяется, я должен изменить его во всех местах, где он используется. Так что является лучшим решением для этой проблемы?
2 ответа
Используйте Selenium Page Object Model, используя Page factory. Помогает поддерживать чистый код и улучшает читабельность кода.
Создайте объектный файл страницы.
Например, если вы используете xPath, как "//div[@id='login_box']//input[@type='submit']"
много, в файл объекта страницы положить:
var loginSubmit = "//div[@id='login_box']//input[@type='submit']"
Затем в ваш основной файл импортируйте файл объекта страницы:
using myPageObjectFile
driver.FindElement(By.XPath(myPageObjectFile.loginSubmit));
Мой C# не очень хорош, так что может быть не так. Но что-то на этот счет должно работать.
Таким образом, когда изменяется xPath, вам нужно только настроить его в объектном файле страницы.