繁体   English   中英

通过Selenium Webdriver中的Java Script Executor传递复杂的xpath

[英]Pass a complicated xpath through Java Script Executor in Selenium Webdriver

我使用以下xpath在网格上查找元素。

By.xpath("//div[contains(text(),'" +EnteredCompetitionName+ "')]/preceding-   sibling::div[contains(concat(' ', @class, ' '), ' slick-cell l0 r0 ')]/a/img"

问题是网格变得太大,并且仅通过xpath使用find元素无法找到我要查找的元素。 因此,我尝试在Selenium Webdriver中使用javascript executor。

WebElement selectedCompGlass = (WebElement) js.executeScript("return document.evaluate('//div[contains(text(),' +EnteredCompetitionName+ ')]/preceding-sibling::div[contains(concat(\' \', @class, \' \'), \' slick-cell l0 r0 \')]/a/img' ,document, null, XPathResult.ANY_TYPE, null ).singleNodeValue;");
js.executeScript("arguments[0].click();", selectedCompGlass);

但是,我仍然收到以下错误:

在参数列表后缺少)命令持续时间或超时:8毫秒生成信息:版本:'2.44.0',修订版:'76d78cf',时间:'2014-10-23 20:02:37'

如果滚动在您的情况下可行,则您可以使用javascript滚动到IntoView,直到找到该元素,然后执行操作。

它将滚动到该元素,

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

您可以使用其他FindElement或某些Selenium方法来过滤FindElement结果以选择结果。 你试过了吗?

例如,在Selenium C#中,我昨天写了类似的东西:

var element = browser.FindElements(By.TagName("input"), 5000)
    .FirstOrDefault(x => x.GetAttribute("data-id-selenium") == "entrar");

等例子

Browser.FindElements(By.CssSelector("li[class='item-listagem']"), 5000)
    .First(x => x.Text.Contains(titulo))
    .FindElement(By.CssSelector("a[href*='AprovarAcaoLiderado']"))
    .Click();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM