Как вы получаете текст для метки с помощью Selenium - PullRequest
1 голос
/ 13 июня 2019

Поэтому я считаю, что могу получить элемент с помощью CSS Selector или Xpath и даже с помощью TagName, но не могу получить текст, связанный с ним.

Вот как выглядит HTML:

<label for="AnswerText">This is the question text? </label>

В моем коде у меня есть это:

static IWebDriver driver = new ChromeDriver(".");
static IWebElement securityQuestion = driver.FindElement(By.TagName("label"));

Console.WriteLine("question is ", securityQuestion.Text)

Что я хочу сделать, это взять этот текст с ярлыка «Это текст вопроса?». Я делаю это, потому что текст меняется и в зависимости от ответа вход будет отличаться, поэтому я должен включить логику, чтобы захватить этот текст и установить его равным переменной для сопоставления.

Я пробовал .Text GetAttribute ("значение"), но это не сработает, поскольку метки не имеют никакого значения, а также различных селекторов.

static IWebDriver driver = new ChromeDriver(".");
static IWebElement securityQuestion = driver.FindElement(By.TagName("label"));

Console.WriteLine("question is ", securityQuestion.Text)

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

У меня пока недостаточно комментариев для комментирования, но то, что у вас есть, должно сработать. Заставляет меня задуматься, правильно ли вы получаете элемент. Что такое исключение / вывод при попытке напечатать текст? Я предполагаю, что есть более одного элемента с меткой TagName на странице. Я бы попытался найти более уникальный родительский элемент, а затем получить дочерний элемент с текстом, который вы ищете.

 IWebElment elem = driver.FindElement(By.Id("ParentID")).FindElement(By.TagName("label"));

Или попробуйте с XPath ... возможно, путь, который вы пробовали раньше, был неверным. Если вы предоставите еще немного HTML, я могу попытаться помочь.

0 голосов
/ 14 июня 2019

Для извлечения текста Это текст вопроса? вам нужно вызвать WebDriverWait для ElementIsVisible() и GetAttribute("innerHTML"), и вы можете использовать любой из следующих Стратегии локатора :

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("label[for='AnswerText']"))).GetAttribute("innerHTML");;
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//label[for='AnswerText']"))).GetAttribute("innerHTML");
    
...