Как получить xpath от элемента и повторно использовать этот xpath для другого элемента - PullRequest
0 голосов
/ 09 декабря 2011
<li id>
<ul>
<li id="planner">
<li id="links">
<li id="trashcan">
<li id="**item70**">
    <ul>
    <li id="item74">
    <li id="item75">
    <li id="item76">
    <li id="item87">
    <li id="item88">
    <li id="item89">
    <li id="item127">
    <li id="item151">
    <li id="item159">
    <li id="item163">
    <li id="item166">
    <li id="item168">
    <li id="item169">
    <li id="item170">
    <li id="**add70**">
    </li>
  </ul>

Это код, с которым я пытаюсь работать.70 от элемента генерируется и может быть случайным числом.Этот же номер повторно используется в Add70 li.Кроме того, остальные предметы также случайны (то есть может быть больше или меньше, даже 0 предметов).Итак, на мой вопрос:

В любом случае возможно ли получить xpath элемента 70 для повторного использования с add70 с веб-драйвером?

Я пытался найти это, но не смог его найти.

Спасибо!Остин

Редактировать:

// [@ id = 'item70'] ")), число 70, генерируется случайным образом. Он будет работать для одного входа, но не для следующего входа.Под повторным использованием я подразумеваю, поскольку «item70» относится к «add70», я бы хотел найти этот элемент и использовать его для добавления

Я хочу повторно использовать часть «item» и исключить число (70). Чтобы его можно было использовать при каждом входе в систему.

Edit2:

Это то, что я сделал, чтобы заставить это работать. Я использовал Contains (x, y) и сделал xpathвот так: .//*[@id='content']/ul/li[4]/ul/li[contains(@id, 'add')] / a

1 Ответ

2 голосов
/ 09 декабря 2011

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

IWebElement myListElement = driver.FindElement(By.XPath("//li[@id='item70']"));
List<IWebElement> childListElements = myListElement.FindElements(By.TagName("li")).ToList();
if (childListElements.Count > 0)
{
 // Do something Here
}

------ РЕДАКТИРОВАТЬ ------

Вот как бы я справился с проблемой, теперь, когда я лучше понял проблему

IWebDriver driver; //set elsewhere
IWebElement myUnorderedList = driver.FindElement(By.XPath("//li[@id]/ul"));  //you have an li in the example with an ID but nothing set to the ID and that's my first reference
IWebElement myAddItem = myUnorderedList.FirstOrDefault(i => i.GetAttribute("id").Contains("item"));
int thisRandomNumber = Convert.ToInt32(myAddItem.GetAttribute("id").Replace("item"));
List<IWebElement> childListElements = myAddItem.FindElement(By.TagName("li")).ToList();
if (childListElements.Count() != thisRandomNumber)
{
 //Note problem
}

Это должно дать вам информацию, которую вы ищете.

...