我在使用 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();
第一次点击(顺便说一句,它不会加载新页面,只是在同一页面上弹出)会起作用,但是系统永远不会打印出“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 没有帮助(点击后网络驱动程序卡住),则将 ENTER 键发送到链接而不是点击:
<小时/>element1.sendKeys(Keys.ENTER);
关于java - Selenium Webdriver.load.strategy 不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595355/