Selenium: - 元素无法滚动到视图中

时间:2018-03-01 08:09:22

标签: selenium selenium-webdriver webdriver

您好我面临下面提到的错误。 我无法点击屏幕截图中提到的买家按钮。 我也试过等待,睡觉功能。 但无法超越这一点。任何人都可以帮助我。

任何人都可以帮助我: - Inspect Element code is 代码是: -

display: none

8 个答案:

答案 0 :(得分:8)

首先,确认元素在您的框架中

如果不是,您需要切换到正确的框架才能点击元素:

var cls=doc.Descendants("ph")
                .Where(Attribute("ll"));

此外,您还可以执行多个步骤,以便在点击不同的UI元素时提高稳定性:

  • 明确在DOM中等待在场
  • 滚动进入元素视图
  • 检查可点击

这有助于稳定吗?

driver.switchTo().frame(driver.findElement(By.name("iframeWithElement")));

例如,如果我正在处理site,我会使用WebDriverWait wait = new WebDriverWait(driver, 3) JavascriptExecutor js = ((JavascriptExecutor) driver) //presence in DOM wait.until(ExpectedConditions.presenceOfElement(By.id("ID"))); //scrolling WebElement element = driver.findElement(By.id("ID"))); js.executeScript("arguments[0].scrollIntoView(true);", element); //clickable wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

答案 1 :(得分:4)

可能是由现有的错误造成的: https://bugzilla.mozilla.org/show_bug.cgi?id=1422272

答案 2 :(得分:2)

您可以尝试使用此版本滚动到元素的x,y位置:

public static void scrollIntoView(WebElement ele) {
    ((JavascriptExecutor)driver).executeScript("window.scrollTo(" + ele.getLocation().x + "," + ele.getLocation().y + ")");
}

答案 3 :(得分:2)

我在Firefox中也遇到了类似的问题,但是((当我第一次单击Hover-menu时,它能够启用主要元素,然后我单击子元素,但是第二次当我尝试单击我正在得到另一个子元素错误)。  错误:“元素无法滚动到视图中”。 我在另一个对我有用的窗口中打开了下一个子菜单。

WebElement element = driver.findElement(By.xpath("//div[2]/ul/li[3]/a"));
WebDriverWait wait = new WebDriverWait(driver, 30); //here, wait time is 20 sec
wait.until(ExpectedConditions.visibilityOf(element)); //this will wait for element to be visible for 20 seconds
element.click(); //now it clicks on element
Thread.sleep(8000);
driver.findElement(By.xpath("//li[3]/ul/li/a")).click();

if(driver.getTitle().equals("Invoice Search")) {

test4.log(LogStatus.PASS, "Navigated to Invoice Search Page");
}

答案 4 :(得分:0)

只需单击该元素即可,而不是scrollingToView

driver.execute_script("arguments[0].click();", element)

答案 5 :(得分:0)

我在Firefox中遇到了同样的问题(在Chrome和Opera中,效果很好)。尝试将JavascriptExecutor更改为Actions:

Actions action = new Actions(driver);
action.moveToElement(element).click().perform();

答案 6 :(得分:0)

我遇到了同样的问题(但在NodeJS中),而不是Java。

我在MacOS上使用了Firefox驱动程序。

问题是:Firefox在MacOS上运行缓慢。因此它仍在启动并且忽略了第一个测试命令。当打算单击一个按钮时,该按钮实际上不存在。

什么解决了我的问题?

在测试任何东西之前,我写了这个睡眠功能:

const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs))

我执行了:

await driver.get('http://localhost:8080/webapp/')
await sleep(5000)
// tests after that

替代:

sleep(5000).then(() => {
  // tests here
});

这足以让Firefox启动并随​​后正确执行测试命令。

答案 7 :(得分:0)

我知道这个问题需要一个 java 答案,但我希望通过这个 python 解释,这个评论将有助于理解这个错误的一个可能来源。

所以,我也遇到了这个问题。我设法解决了基于这些评论 https://stackoverflow.com/a/56361554/6569715

https://stackoverflow.com/a/51789111/6569715

我对此问题的补充是,如果出现此问题,您可能需要检查您的 CSS。就我而言,结果证明我尝试单击的元素位于 .css 文件之一中的 (x: -9999, y: 538) 处。难怪在视图中无法滚动。

此外,如果您使用以下内容进行单击,则此 CSS 错误很可能会引发异常。

from selenium.webdriver.common.action_chains import ActionChains

# ...

tc = self.browser.find_element(*self.TC_CHECKBOX)
ActionChains(self.browser).move_to_element(tc).click(tc).perform()