Использование переменных в качестве селекторов с Selenium 2 Webdriver by.cssselector

#c# #selenium #automation #webdriver

#c# #selenium #автоматизация #webdriver

Вопрос:

Я использую Visual Studio 2010 для написания автоматических тестов Selenium 2 Webdriver на C #. Я искал повсюду примеры использования переменных в качестве селекторов и не нашел ничего, что, похоже, работало бы. Единственный найденный мной пример переменной, используемой в качестве селектора, содержал переменную с префиксом $ и заключенную в {}. Пример того, что я пытаюсь сделать, приведен ниже:

 string surveyName = "Selenium test survey";
Driver.FindElement(By.CssSelector("tr[svd='${surveyName}']"))
  

Я получаю сообщение об ошибке:

 OpenQA.Selenium.WebDriverException : Unexpected error. Unable to find element using     css: tr[svd='${surveyName}']
  

Если я «жестко запрограммирую» селектор следующим образом:

 Driver.FindElement(By.CssSelector("tr[svd='Selenium test survey']"))
  

он находит элемент.

svd является атрибутом элемента tr. Я пытаюсь выбрать строку в таблице по значению этого атрибута. Текст будет отличаться для каждого теста и поэтому должен быть переменной.

Я пробовал выразить переменную несколькими различными способами, но мне не повезло заставить это работать. Любая помощь была бы высоко оценена.

Спасибо.

Ответ №1:

 string surveyName = "Selenium test survey";
Driver.FindElement(By.CssSelector(String.Format("tr[svd='{0}']", surveyName))
  

будет делать то, что вы хотите. Это c #, поэтому, когда требуется строка, вы можете делать все, что угодно, чтобы получить эту строку

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

1. Отличный вопрос … у меня были те же проблемы, и ваш ответ мне очень помог, @Caspar. Однако у меня есть один вопрос. Если я хочу выбрать идентификатор элемента ввода и этот идентификатор Mileage_departmentForm_16 я знаю, что могу просто использовать (By.CssSelector("input[id-'Mileage_departmentForm_16']")) , но есть ли способ, которым я мог бы сделать что-то вроде выбора идентификатора, который начинается с «Mileage»? Спасибо!

2. О, вау, я чувствую себя глупо … только что понял это. Вы должны использовать (By.CssSelector("input[id^='Mileage_departmentForm_16']")) . Я полагаю, что все другие типы выбора также работают (начинается с, заканчивается, имеет и т.д.).