我在使用webdriver加载页面时遇到问题。我当前(有问题的)解决方案涉及使用firefox的不稳定负载,但我对其他解决方案持开放态度。
核心问题 我所有问题的根源都来自于当我用webdriver正常调用它时我的页面永远不会完全加载,因此永远不会执行第二步,它总是加载。当您使用普通浏览器访问该站点时,它会正常加载。我已经尝试了一些间歇性工作的工作,包括打开驱动程序到谷歌,然后转到有时会加载的页面,并且
IJavaScriptExecutor js = (IJavaScriptExecutor)Driver;
js.ExecuteScript("return window.stop");
根据this question的建议,有时会在没有加载的情况下继续播放。但这些都不能始终如一地工作(可能只有50%的时间)
到目前为止,我所做的最好的是使用不稳定的加载策略。然而,这有其自身的不同问题,所有这些问题有时只会发生。
1)有时它根本不会等待页面加载,我得到一个"无法找到元素:"加载页面的毫秒数内的异常,尽管我有一个等待设置:
new WebDriverWait(cdriver, 30).until(ExpectedConditions.visibilityOf(cdriver.findElement(By.id(myId))));
的Thread.sleep(3000);解决了这个问题,但我读到这是一种草率的做事方式。
2)如果我通过该步骤,我的测试应该单击一个链接,然后单击另一个链接继续进行测试。但是,它在第一次点击后经常会卡住。所以,如果我的代码是这样的:
Thread.sleep(3000);
element1.click();
System.out.println("clicked!");
element2.click();
第一次点击(不会加载新页面,顺便说一下,只是在同一页面上弹出一下)会起作用,但系统将永远不会打印出来"点击!&# 34;它以相同的方式卡在最初加载页面(没有不稳定的加载的东西)。如果它超过了这个障碍,我认为其余的测试都没问题。
任何想法1)为什么它有时会起作用但不会起作用。 2)如何解决它3)如何让我的页面首先加载
谢谢!
答案 0 :(得分:0)
尝试以下方法:
不要等待页面上元素的可见性 - 在您的情况下By.id(myId)
在加载和触发所有Java脚本之前,该元素可以比页面完全加载更早可见
等待页面上的某些元素变为可解决。例如,您可以等到link
以这种方式变为可解答:
By locatorOfLink1 = By.xpath(....); // By.id, By.name, By.linkText etc.
wait.until(ExpectedConditions.elementToBeClickable(locatorOfLink1));
如果以上内容对问题#2没有帮助(点击后网页驱动程序卡住),则将ENTER键发送到链接而不是点击:
element1.sendKeys(Keys.ENTER);