您好我面临下面提到的错误。 我无法点击屏幕截图中提到的买家按钮。 我也试过等待,睡觉功能。 但无法超越这一点。任何人都可以帮助我。
任何人都可以帮助我: - Inspect Element code is 代码是: -
display: none
答案 0 :(得分:8)
首先,确认元素在您的框架中。
如果不是,您需要切换到正确的框架才能点击元素:
var cls=doc.Descendants("ph")
.Where(Attribute("ll"));
此外,您还可以执行多个步骤,以便在点击不同的UI元素时提高稳定性:
这有助于稳定吗?
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()