У меня есть следующий HTML:
<div class="k-list-container k-popup k-group k-reset" id="ImmunizationSearch-list" data-role="popup" style="position: absolute; font-size: 13px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-stretch: 100%; font-style: normal; font-weight: 400; line-height: normal; width: 629.813px; height: 500px; display: none; transform: translateY(-506px);"><div class="noDataMessage" style="display: none;">No Results Found</div><div class="k-group-header" style="display:none"></div><div class="k-list-scroller" unselectable="on" style="height: 483px;"><ul unselectable="on" class="k-list k-reset" tabindex="-1" aria-hidden="true" id="ImmunizationSearch_listbox" aria-live="polite" data-role="staticlist" role="listbox"><li tabindex="-1" role="option" unselectable="on" class="k-item k-state-focused" data-offset-index="0" id="cae07c92-eef7-4af1-8a98-e22ff0370cc3"><span class="col-md-7">ADENO </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="1"><span class="col-md-7">ANTHRAX </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="2"><span class="col-md-7">BCG </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="3"><span class="col-md-7">cholera </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="4"><span class="col-md-7">DTAP </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="5"><span class="col-md-7">FLU </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="6"><span class="col-md-7">H1N1 flu </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="7"><span class="col-md-7">H5N1 flu </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="8"><span class="col-md-7">HepA </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="9"><span class="col-md-7">HepB </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="10"><span class="col-md-7">HIB </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="11"><span class="col-md-7">HPV </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="12"><span class="col-md-7">Japanese encephalitis </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="13"><span class="col-md-7">Lyme disease </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="14"><span class="col-md-7">MENING </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="15"><span class="col-md-7">MeningB </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="16"><span class="col-md-7">MMR </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="17"><span class="col-md-7">Plague </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="18"><span class="col-md-7">PneumoPCV </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="19"><span class="col-md-7">PneumoPPV </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="20"><span class="col-md-7">POLIO </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="21"><span class="col-md-7">RABIES </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="22"><span class="col-md-7">ROTAVIRUS </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="23"><span class="col-md-7">Td </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="24"><span class="col-md-7">TDAP </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="25"><span class="col-md-7">TYPHOID </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="26"><span class="col-md-7">VACCINIA </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="27"><span class="col-md-7">VARICELLA </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="28"><span class="col-md-7">VEE </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="29"><span class="col-md-7">YELLOWFEVER </span></li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="30"><span class="col-md-7">ZOSTER </span></li></ul></div></div>
Используемый мной XPath: // span [@ class = 'col-md-7'
Когда я использую это в XPath Tester, это дает мне следующий вывод:
<span class="col-md-7">ADENO </span>
<span class="col-md-7">ANTHRAX </span>
<span class="col-md-7">BCG </span>
<span class="col-md-7">cholera </span>
<span class="col-md-7">DTAP </span>
<span class="col-md-7">FLU </span>
<span class="col-md-7">H1N1 flu </span>
<span class="col-md-7">H5N1 flu </span>
<span class="col-md-7">HepA </span>
<span class="col-md-7">HepB </span>
<span class="col-md-7">HIB </span>
<span class="col-md-7">HPV </span>
<span class="col-md-7">Japanese encephalitis </span>
<span class="col-md-7">Lyme disease </span>
<span class="col-md-7">MENING </span>
<span class="col-md-7">MeningB </span>
<span class="col-md-7">MMR </span>
<span class="col-md-7">Plague </span>
<span class="col-md-7">PneumoPCV </span>
<span class="col-md-7">PneumoPPV </span>
<span class="col-md-7">POLIO </span>
<span class="col-md-7">RABIES </span>
<span class="col-md-7">ROTAVIRUS </span>
<span class="col-md-7">Td </span>
<span class="col-md-7">TDAP </span>
<span class="col-md-7">TYPHOID </span>
<span class="col-md-7">VACCINIA </span>
<span class="col-md-7">VARICELLA </span>
<span class="col-md-7">VEE </span>
<span class="col-md-7">YELLOWFEVER </span>
<span class="col-md-7">ZOSTER </span>
Я пытаюсь прочитать это в массив, а затем перебрать его и вытащить текст. Мой код указан ниже:
IWebElement webElement = Driver.ngInstance.FindElement(By.CssSelector("#Immunization > div.form-group.panel-body > div > div.col-lg-9.col-md-8 > div > span.k-widget.k-combobox.k-header > span > span > span"));
Actions actions = new Actions(Driver.ngInstance);
actions.MoveToElement(webElement);
Driver.Wait(TimeSpan.FromSeconds(2));
actions.Click();
Driver.Wait(TimeSpan.FromSeconds(2));
actions.Build().Perform();
IList<IWebElement> all = Driver.Instance.FindElements(By.XPath("//span[@class='col-md-7']"));
String[] allText = new String[all.Count + 5];
int i = 0;
foreach (IWebElement element in all)
{
allText[i] = element.Text;
AHT_Automation_Inherit.log.Info(element.Text);
i++;
}
Это дает мне следующее в моем журнале:
2019-03-28 14:29:01,391 Automation -
2019-03-28 14:29:01,410 Automation -
2019-03-28 14:29:01,428 Automation -
2019-03-28 14:29:01,447 Automation -
2019-03-28 14:29:01,466 Automation -
2019-03-28 14:29:01,489 Automation - FLU
2019-03-28 14:29:01,508 Automation - H1N1 flu
2019-03-28 14:29:01,529 Automation - H5N1 flu
2019-03-28 14:29:01,548 Automation - HepA
2019-03-28 14:29:01,565 Automation - HepB
2019-03-28 14:29:01,589 Automation - HIB
2019-03-28 14:29:01,612 Automation - HPV
2019-03-28 14:29:01,628 Automation - Japanese encephalitis
2019-03-28 14:29:01,647 Automation - Lyme disease
2019-03-28 14:29:01,664 Automation - MENING
2019-03-28 14:29:01,679 Automation - MeningB
2019-03-28 14:29:01,696 Automation - MMR
2019-03-28 14:29:01,714 Automation - Plague
2019-03-28 14:29:01,739 Automation - PneumoPCV
2019-03-28 14:29:01,780 Automation - PneumoPPV
2019-03-28 14:29:01,801 Automation - POLIO
2019-03-28 14:29:01,820 Automation - RABIES
2019-03-28 14:29:01,837 Automation - ROTAVIRUS
2019-03-28 14:29:01,854 Automation - Td
2019-03-28 14:29:01,872 Automation - TDAP
2019-03-28 14:29:01,887 Automation - TYPHOID
2019-03-28 14:29:01,904 Automation - VACCINIA
2019-03-28 14:29:01,920 Automation - VARICELLA
2019-03-28 14:29:01,937 Automation - VEE
2019-03-28 14:29:01,954 Automation - YELLOWFEVER
2019-03-28 14:29:01,973 Automation - ZOSTER
Иногда я получаю все, кроме 3 или 4, но по какой-то причине я не могу получить их все. Я думаю, что это проблема времени, так как я не могу прочитать раскрывающиеся элементы, пока не нажму на раскрывающийся список. Но я не уверен, как получить все элементы.
ОБНОВЛЕНИЕ:
Мне удалось исправить эту проблему с помощью следующих изменений в моем коде:
IWebElement webElement = Driver.ngInstance.FindElement(By.CssSelector("#Immunization > div.form-group.panel-body > div > div.col-lg-9.col-md-8 > div > span.k-widget.k-combobox.k-header > span > span > span"));
Actions actions = new Actions(Driver.ngInstance);
actions.MoveToElement(webElement);
Driver.Wait(TimeSpan.FromSeconds(2));
actions.Click();
Driver.Wait(TimeSpan.FromSeconds(2));
actions.Build().Perform();
Driver.Wait(TimeSpan.FromSeconds(2));
IList<IWebElement> all = Driver.Instance.FindElements(By.XPath("//span[@class='col-md-7']"));
String[] allText = new String[all.Count];
int i = 0;
foreach (IWebElement element in all)
{
allText[i] = element.Text;
AHT_Automation_Inherit.log.Info(element.Text);
i++;
}