Как оптимизировать этот код Selenium WebDriver (Linq?)

#selenium #webdriver

#селен #webdriver

Вопрос:

Я новичок в Selenium и C #.

Я знаю, что этот код не является оптимальным, можете ли вы посоветовать, как я могу писать такие вещи быстрее и короче?

По сути, я ищу кнопку, ссылка на которую содержит «addNewProduct».

         var addButtons = _driver.FindElements(By.LinkText("Add"));
        IWebElement addNewProductButton = null;

        foreach (IWebElement button in addButtons) {
            if (button.GetAttribute("href").Contains("addNewProduct")){
                addNewProductButton = button;
                break;
            }
        }

        addNewProductButton.Click();
  

Ответ №1:

Используйте XPath или CSS-селектор.

XPath

 IWebElement btnAdd = _driver.FindElement(By.XPath("//a[contains(@href, 'addNewProduct')]"));
  

Селектор CSS

 IWebElement btnAdd = _driver.FindElement(By.CssSelector("a[href*='addNewProduct']"));
  

Я рекомендую CSS Selector, поскольку они быстрее, а синтаксис более лаконичный.

Комментарии:

1. Большое вам спасибо, не могли бы вы посоветовать, где я могу узнать, как создавать эти операторы CCS Selector и Xpath?

2. Первые результаты поиска в Google «Учебное пособие по XPath» и «Учебное пособие по выбору CSS» довольно хороши. Затем используйте что-то вроде Firebug (с FireFinder для XPath), чтобы протестировать ваши запросы, прежде чем использовать их в Selenium