如何从一个项目中获取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,‘添加’)]/
如果我正确理解,我认为您正试图解析元素以从嵌套无序列表中获取元素。如果这就是你想要做的,那么下面的命令可以为你工作:
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
}