我在使用webdriver加载页面时遇到问题。我当前(有问题的)解决方案涉及将不稳定负载与firefox一起使用,但是我愿意接受其他解决方案。
核心问题
我所有问题的根源在于以下事实:当我通常使用webdriver调用页面时,页面将永远不会完全加载,因此永远也不会执行第二步,而是始终加载。当您使用常规浏览器访问该网站时,它会很好地加载。我已经尝试了一些间歇性的解决方法,包括将驱动程序打开到google,然后转到有时使其加载的页面,以及
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();
第一次单击(顺便说一句,它不会加载新页面,只是在同一页面上弹出一个窗口)将起作用,但随后系统将永远不会打印出“ clicked!”,它会以同样的方式卡住最初加载页面(没有不稳定的加载内容)。如果/何时克服了这一障碍,我认为其余的测试很好。
任何想法1)为什么有时起作用,但其他人却不行。 2)如何解决它3)如何首先让我的页面加载
谢谢!
最佳答案
请尝试以下方法:
不要等待页面上元素的可见性-在您的情况下为By.id(myId)
。
在加载和触发所有Java脚本之前,该元素可以在页面完全加载之前更早可见。
等待页面上的某些元素变为可点击。例如,您可以等到link
通过这种方式变为可点击状态:
By locatorOfLink1 = By.xpath(....); // By.id, By.name, By.linkText etc.
wait.until(ExpectedConditions.elementToBeClickable(locatorOfLink1));
如果以上方法不能解决问题2(单击该Web驱动程序后卡住),则将ENTER键发送到链接,而不是单击:
element1.sendKeys(Keys.ENTER);