点击下面的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&&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&&rp.control)rp.control.InvokeReportAction('Toggle','26iT0C0x0');}return false;"><img border="0" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=10.0.30319.1&Name=Microsoft.ReportingServices.Rendering.HtmlRenderer.RendererResources.TogglePlus.gif" alt="+"></a> 2013</div>
我使用下面的脚本在div标签内点击锚点。对于上面的html代码,它不是仅修复id示例的结尾部分&#34; 26iT0C0x0&#34;是固定的。我使用的脚本是:
WebElement e1=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[ends-with(@id,'26iT0C0x0')]/a")));
e1.click();
答案 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也会生成。我不会依靠它们来获得稳定的测试环境。