我使用了以下xpath来查找网格上的元素。
By.xpath("//div[contains(text(),'" +EnteredCompetitionName+ "')]/preceding- sibling::div[contains(concat(' ', @class, ' '), ' slick-cell l0 r0 ')]/a/img"
问题是网格变得太大,我试图找到的元素只能通过xpath使用find元素找到。因此我尝试在selenium webdriver中使用javascript执行器。
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'
答案 0 :(得分:1)
如果滚动适用于你的情况,那么你可以使用javascript滚动它来直到它找到元素然后再做你的行动。
它将滚动到元素
WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
答案 1 :(得分:0)
您可以使用其他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();