如何使用selenium webdriver定位元素以获取以下html

时间:2014-08-14 09:17:04

标签: selenium webdriver

点击下面的HTML时遇到问题:

<div id="P7d2205a39cb24114b60b80b3c14cc45b_1_26iT0C0x0" style="word-wrap:break-word;white-space:pre-wrap;font-weight:500;" class="Ab73b430b430a49ebb0a0e8a49c8d71af3"><a tabindex="1" style="cursor:pointer;" onclick="var rp=$get('ctl00_ContentPlaceHolder1_ReportViewer1_ctl10_ReportControl');if(rp&amp;&amp;rp.control)rp.control.InvokeReportAction('Toggle','26iT0C0x0');return false;" onkeypress="if(event.keyCode == 13 || event.which == 13){var rp=$get('ctl00_ContentPlaceHolder1_ReportViewer1_ctl10_ReportControl');if(rp&amp;&amp;rp.control)rp.control.InvokeReportAction('Toggle','26iT0C0x0');}return false;"><img border="0" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=10.0.30319.1&amp;Name=Microsoft.ReportingServices.Rendering.HtmlRenderer.RendererResources.TogglePlus.gif" alt="+"></a>&nbsp;2013</div>

我使用下面的脚本在div标签内点击锚点。对于上面的html代码,它不是仅修复id示例的结尾部分&#34; 26iT0C0x0&#34;是固定的。我使用的脚本是:

WebElement e1=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[ends-with(@id,'26iT0C0x0')]/a")));
e1.click();

3 个答案:

答案 0 :(得分:0)

您可以在xpath查找中使用'contains'方法:

driver.findElement(By.xpath("//div[contains(@id,'26iT0C0x0')]")

答案 1 :(得分:0)

我建议你考虑CSS选择器替代,因为CSS比xpath工作得更快。 因此,CSS中的'contains'属性代表'* =' 如果我们想要通过'CSS'找到属性,以此结尾:<htmlTag A="blablaCSS" >我们需要执行以下操作:

String CSSselector="htmlTag[A*=CSS]";

并且您搜索了此元素。

因此,考虑您的示例CSS选择器如:

String cssSearched="div[id*=26iT0C0x0] a";

也尝试点击不在链接上 - a 但也在父div上:

String cssSearched="div[id*=26iT0C0x0]";

driver.findElement(By.cssSelector(cssSearched));

希望这适合你。

答案 2 :(得分:0)

正如Mark Rwolands已经提到的:xpath-Function&#39;以-()&#39;结束。在Selenium 2中不受支持。 另外,如果您考虑将来使用chromeDriver,我建议您点击图片,而不是锚点,请参阅: https://sites.google.com/a/chromium.org/chromedriver/help/clicking-issues

编辑: 您的ID也会生成。我不会依靠它们来获得稳定的测试环境。