如何从一个项目中获取xpath,并在另一个项目中重用该xpath

本文关键字:xpath 项目 另一个 获取 一个 | 更新日期: 2023-09-27 18:17:25

<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个道具)。所以,对于我的问题:

是否有可能获得item70的xpath与webdriver的add70重用?

我试着搜索这个,但是找不到它。

谢谢!奥斯汀

编辑:

//[@id='item70']")),数字70,是随机生成的。它将为一次登录工作,但不是下一次登录。通过重用,我的意思是由于"item70"与"add70"相关,我希望找到该项目并在add

上使用它。

我想重用"item"部分并排除数字(70)。这样就可以在每次登录时重用它。

Edit2:

这就是我所做的工作。我使用Contains(x, y),并使xpath像这样:。//* [@ id ="内容"]/ul/李[4]/ul/李(包含(@ id,‘添加’)]/

如何从一个项目中获取xpath,并在另一个项目中重用该xpath

如果我正确理解,我认为您正试图解析元素以从嵌套无序列表中获取元素。如果这就是你想要做的,那么下面的命令可以为你工作:

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
}

------ EDIT ------

既然我对这个问题有了更好的了解,我将如何处理这个问题

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
}