如何使用xpath为多个div找到元素

时间:2017-08-16 09:00:44

标签: c# selenium

尝试选择以下元素时遇到一些问题:

<div class="x-layer x-combo-list " id="ext-gen452" style="position: absolute; z-index: 11000; visibility: visible; left: 89px; top: 66px; width: 398px; height: 20px;">
 <div class="x-combo-list-inner" id="ext-gen454" style="width: 398px; overflow: auto; height: 20px;">
  <div ext:qtip="xxxWebService@xxx.com" class="x-combo-list-item  x-combo-selected">xxxWebService@xxx.com
</div>
 </div>
  </div>

我希望能够使用ext:qtip =&#34; xxxWebService@xxx.com"但是它一直说它无法找到元素,我可以对我需要做些什么进行一些指导,以便能够找到元素吗?

    WebDriverWait waitAgent = new WebDriverWait(_driver, TimeSpan.FromSeconds(2));
    waitAgent.Until(ExpectedConditions.ElementToBeClickable(By.XPath(("//div/div/div*[@ext:qtip='xxxWebService@xxx.com]'))))
        .Click();

2 个答案:

答案 0 :(得分:0)

您可以在xpath下面使用: -

//div[@class='x-combo-list-item  x-combo-selected']

正如我所见,您还尝试使用电子邮件ID进行搜索,然后您可以使用XPath,如下所示 : -

(//div[contains(.,'xxxWebService@xxx.com')])[3]

或者更具体,id不是动态的: -

//div[@id='ext-gen452']/div/div[@class='x-combo-list-item  x-combo-selected']

如果id为动态或非唯一,您可以将id替换为class。与班级相同

如果上述解决方案也无效,请使用等待..必须有等待问题

希望它能帮到你

答案 1 :(得分:0)

我觉得您使用的xpath存在一个小问题:

By.XPath(("//div/div/div*[@ext:qtip='xxxWebService@xxx.com]')))

您已使用div*,其中*似乎不必要。此外,收盘"缺失,收盘'错位。再次,当您在DOM中穿越div时,与//div/div/div中的id一样,我们本来希望使用父div的{​​{1}}。在DOM tree中是唯一的。因此,根据您的要求使用属性ext:qtip = "xxxWebService@xxx.com"的以下代码块可能符合您的目的。

WebDriverWait waitAgent = new WebDriverWait(_driver, TimeSpan.FromSeconds(5));
waitAgent.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@id='ext-gen454']/div[@ext:qtip='xxxWebService@xxx.com']"))).Click();