我在Linux上使用PhantomJSDriver和Selenium v.2.1(目前最新)。
我登录,点击提交按钮,然后我的网站重定向(2次,http 302),我尝试在他/她登录时找到用户名。
loginButton.click() // will refresh the page
// TODO: after redirect (302). wait?
val profileElement = driver.findElement(By.xpath("//*[@id='login_name']"))
所以,问:通常的解决方案是什么,如何在页面重定向后获取元素?
更新:(页面重新加载等待)
我试着等待:
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
默认情况下,我不使用任何cookie功能。我相信它类似于Chrome'匿名模式,但使用Phantom浏览器。
到目前为止的结果相同。
更新2(等待特定元素):
我试图在用户登录后等待我期望的特定元素:
val waitForProfileNameLink = new WebDriverWait(driver, 10)
waitForProfileNameLink.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='login_name']")))
与presenceOfElementLocated
在等待时,我在日志中看到:
phantomjs://platform/console++.js:263 in error
[ERROR - 2016-11-20T14:10:37.777Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1479651037763
多次。我猜这是它尝试/等待的方式。
更新3(更新依赖项):
因为我在考虑this错误,所以
与“设置”部分中的suggested一样, 我摆脱了对PhantomJSDriver的直接依赖,而是下载了最新的Phantom JS和最新的Selenium,
so(org.openqa.selenium.phantomjs.PhantomJSDriver v = 1.3.0,Selenium 3.0.1):
System.setProperty("phantomjs.binary.path","/home/me/phantomjs/bin/phantomjs")
implicit val driver: RemoteWebDriver = new PhantomJSDriver()
但是,同样的问题。
更新4 - (截图)
我在尝试登录后做了截图:
loginButton.click()
driver.manage().timeouts().pageLoadTimeout(50, TimeUnit.SECONDS)
val scrFile = driver.getScreenshotAs(OutputType.FILE)
FileUtils.copyFile(scrFile, new File("/home/me/login.png"))
该截图显示,实际上,我仍然在登录页面上,并且正在等待登录按钮(登录按钮上的进度条)
现在我认为当我使用幻影或真正的浏览器去那里时,某个特定网站的行为会有所不同(有些js trigets让我无法进入)。那可能是什么区别? 但我想我知道它是什么,但似乎它超出了这个问题的范围(所以我关闭它)。