Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从一个项目中获取xpath并将该xpath重新用于另一个项目_C#_Xpath_Webdriver_Reusability - Fatal编程技术网

C# 如何从一个项目中获取xpath并将该xpath重新用于另一个项目

C# 如何从一个项目中获取xpath并将该xpath重新用于另一个项目,c#,xpath,webdriver,reusability,C#,Xpath,Webdriver,Reusability,这就是我试图使用的代码。生成项目的70,可以是随机数。相同的编号在Add70 li中重复使用。另外,其余的项目也是随机的(即可能有更多或更少的项目,甚至是0个项目)。因此,我的问题是: 是否有可能让item70的xpath与add70 with webdriver一起重用 我试图寻找这个,但找不到 谢谢! 奥斯汀 编辑: //[@id='item70']'))是随机生成的,编号70。它可以用于一次登录,但不能用于下一次登录。所谓重用,我的意思是,由于“item70”与“add70”相关,我希望找

这就是我试图使用的代码。生成项目的70,可以是随机数。相同的编号在Add70 li中重复使用。另外,其余的项目也是随机的(即可能有更多或更少的项目,甚至是0个项目)。因此,我的问题是:

是否有可能让item70的xpath与add70 with webdriver一起重用

我试图寻找这个,但找不到

谢谢! 奥斯汀

编辑:

//[@id='item70']'))是随机生成的,编号70。它可以用于一次登录,但不能用于下一次登录。所谓重用,我的意思是,由于“item70”与“add70”相关,我希望找到该项目并在add上使用它

我想重用“item”部分并排除数字(70),以便在每次登录时都可以重用它

编辑2:

这就是我所做的工作。我使用了Contains(x,y)并使xpath如下所示:
./*[@id='content']/ul/li[4]/ul/li[contains(@id,'add')]/a

如果我理解正确,我认为您正在尝试解析元素以从嵌套无序列表中获取元素。如果您正试图这样做,那么以下操作对您有效:

<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>
IWebElement myListElement=driver.FindElement(By.XPath(“//li[@id='item70']”);
List childListElements=myListElement.FindElements(按.TagName(“li”)).ToList();
如果(childListElements.Count>0)
{
//在这里做点什么
}
------编辑------

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

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;//在别处设置
IWebElement myUnorderedList=driver.FindElement(By.XPath(“//li[@id]/ul”);//在示例中,您有一个具有id的li,但没有设置任何id,这是我的第一个引用
IWebElement myAddItem=myUnorderedList.FirstOrDefault(i=>i.GetAttribute(“id”)。包含(“项”);
int thisRandomNumber=Convert.ToInt32(myAddItem.GetAttribute(“id”).Replace(“项”);
List childListElements=myAddItem.FindElement(按.TagName(“li”)).ToList();
if(childListElements.Count()!=thisRandomNumber)
{
//注意问题
}

这应该能让你得到你想要的信息。

你所说的“重用”XPath表达式是什么意思?你可以用一个联合运算符来选择两个或多个元素的XPath表达式:(//li[@id='**item70**'])|(//li[@id='**add70**'])实际上是的。我已经在使用该代码了。我的观点是,//[@id='item70']))、数字70、,是随机生成的。它只适用于一次登录,但不适用于下一次登录。由于“item70”与“add70”相关,我希望找到该项并在add By reuse上使用它,我的意思是我希望搜索“item”部分并排除数字(70)。这样它就可以在每次登录时重复使用。@Austin看一下我的编辑。我还没有测试过上面的代码,但我95%相信这会让你得到你想要的。基本上,您只需要一个lambda表达式来获得正确的IDI,但由于某些奇怪的原因,您的代码无法正常工作。VS出了问题。但是经过一些研究,我确实通过使用Contains(x,y)找到了解决方案。像这样:./*[@id='content']/ul/li[4]/ul/li[contains(@id'add')]/a
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
}