Sti*_*rik 24 java selenium scroll webdriver click
我遇到了Selenium WebDriver的问题.我尝试点击窗口页面外的链接(你需要向上滚动才能看到它).我目前的代码是相当标准的:
menuItem = driver.findElement(By.id("MTP"));
menuItem.click();
// I also tried menuItem.sendKeys(Keys.RETURN);
Run Code Online (Sandbox Code Playgroud)
我知道我可以向上滚动,在这种情况下它会起作用.但是如果你有很长的项目列表,你不一定知道你需要向下滚动多远.
有没有办法点击不在页面可见部分的链接(但滚动时会显示)?
作为旁注,我正在使用Firefox,但我打算也使用IE7/8/9和Chrome.
任何帮助将不胜感激.
编辑:我担心我不能提供源代码,因为我工作的公司不允许它,但我可以给出我想点击的链接的代码:
<div class="submenu">
<div id="MTP">Link title</div>
</div>
Run Code Online (Sandbox Code Playgroud)
链接可见时,完全相同的代码有效,只有当链接不可用时才能使用.
编辑2:实际上,奇怪的是,它不会引发任何异常,只是转到下一条指令.所以基本上,会发生什么:
menuItem = driver.findElement(By.id("MTP")); // no exception
menuItem.click(); // no exception
//... some code ensuring we got to the next page: timeout reached
driver.findElement(By.id("smLH")).click(); // NoSuchElementException, as we're on the wrong page.
Run Code Online (Sandbox Code Playgroud)
Jac*_*ekM 14
实际上可以自动滚动到元素.虽然在这种情况下这不是一个好的解决方案(必须有一种方法可以让它在不滚动的情况下工作),我会将其作为一种解决方法发布.我希望有人能提出更好的想法......
public void scrollAndClick(By by)
{
WebElement element = driver.findElement(by);
int elementPosition = element.getLocation().getY();
String js = String.format("window.scroll(0, %s)", elementPosition);
((JavascriptExecutor)driver).executeScript(js);
element.click();
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我在另一个问题中发布了相同的答案,所以这只是一个复制和粘贴.
我曾经有一个组合框,我不需要扩展它.我所做的是使用Actions构建器,因为moveToElement()函数会自动将对象滚动到视图中.然后可以点击它.
WebElement element = panel.findElement(By.className("tabComboBoxButton"));
Actions builder = new Actions(this.driver);
builder.moveToElement(element);
builder.click();
builder.build().perform();
Run Code Online (Sandbox Code Playgroud)
(面板只是我POM中的一个包裹元素)
最近,当JS对话框中有可选对象列表时,我遇到了类似的问题.有时selenium不会在列表中选择正确的对象.所以我发现这个javascript建议:
WebElement target = driver.findElement(By.id("myId"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", target);
Thread.sleep(500); //not sure why the sleep was needed, but it was needed or it wouldnt work :(
target.click();
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题
小智 7
而不是将滚动条移动到按钮位置,有时它对我不起作用,我将回车键发送到按钮
var element = driver.FindElement(By.Id("button"));
element.SendKeys(Keys.Enter);
Run Code Online (Sandbox Code Playgroud)
嘿,你可以用这个红宝石
variable.element.location_once_scrolled_into_view
Run Code Online (Sandbox Code Playgroud)
存储元素以在变量中查找
| 归档时间: |
|
| 查看次数: |
32704 次 |
| 最近记录: |