2017-02-15 44 views
0

这是关于Selenium并单击的另一个问题。我一直在挣扎大约两天,无法实现它 - 我已经在互联网上尝试了答案,现在我需要一个协调一致的努力。提前致谢!!Selenium,Java,屏幕截图和点击按钮的问题

我在以下网站上工作http://144.76.109.38/peTEST - 如果您想要追溯我的步骤,这可能会有所帮助。

我想填写登录表单,然后单击登录并查看答案页。

这里是我的代码:

import java.io.File; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.Writer; 
import java.io.IOException; 
import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.openqa.selenium.support.ui.Select; 
public class toJava { 
     public static void main(String[] args) { 
       System.setProperty("webdriver.gecko.driver","/home/tallen/RTI/lib/geckodriver/geckodriver"); 
       WebDriver driver = new FirefoxDriver(); 
       driver.get("http:144.76.109.38/peTEST"); 
       File SF2 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
       try{ 
        FileUtils.copyFile(SF2, new File("./out-004.png")); 
       }catch(IOException ioe){ 
         System.out.println("There was an IO error"); 
       } 
       driver.findElement(By.id("user_login_name")).click(); 
       WebElement WE4 = driver.findElement(By.id("user_login_name")); 
       WE4.sendKeys("Superuser"); 
       driver.findElement(By.id("user_password")).click(); 
       WebElement WE6 = driver.findElement(By.id("user_password")); 
       WE6.sendKeys("Jkerouac1!"); 
       WebElement WE7 = driver.findElement(By.xpath(".//*[@type='button'][@onclick='login()'][@value='Login']")); 
       WE7.sendKeys(Keys.ENTER); 
       File SF8 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
       try{ 
         FileUtils.copyFile(SF8, new File("./out-005.png")); 
       }catch(IOException ioe){ 
         System.out.println("There was an IO error"); 
       } 
       driver.quit(); 
     } 
} 

所以基本上我打开的页面中,采取了截屏输入用户名和密码,点击登录,然后采取另一个屏幕截图。

编译和运行在这是干净的 - 这是没有例外,没有问题。我甚至有两个截图。第一张屏幕截图显示登录页面 - 没有输入数据。第二个屏幕截图显示了登录页面已填充,我想单击标记的按钮,但不是您成功登录时将获得的“欢迎页面”。该屏幕截图显示了已标记的按钮,我知道已找到该元素。我已经在脚本中提供了登录信息,以防您想先尝试使用Selenium。

为什么登录按钮没有被“点击”。我尝试点击,执行等无济于事。我甚至尝试了隐含的等待 - 仍然没有。

我尝试了高级用法交互 - 但仍然没有。

我是Selenium和Java的新手,希望这只是我忽略的一些愚蠢的东西。但在浏览网页之后,这些解决方案并没有帮助。

我在Debian-70-喘息-64-LAMP工作

我的硒库是从客户联合3.0.1-nodeps.jar

我Geckodriver是v0.11.1-LINUX64

感谢您的帮助!

+0

假设点击登录按钮的说法是'它WE7.sendKeys(Keys.ENTER)',为什么你发送一个回车键的按钮,而不是调用'点击()'就像你用做' user_login_name'和'user_password'字段?我不一定说它是错误的(我不知道,也没有检查),但是我只是单击()来代替它。另外,为什么你要在'user_login_name'和'user_password'字段上调用'click()'?只要给他们发送'键'。 – SantiBailors

+0

嗨SantiBailors - 这只是一个演变。我尝试点击(),这并没有奏效。我在网上的其他地方看到了这个提示,所以我试了一下。它的工作原理 - 也就是说,它不会产生任何问题,但屏幕截图仍然不正确,这意味着点击没有成功。谢谢!!! –

回答

1

嗨,
我不知道它是否会导致问题,但无论如何登录按钮我会使用

WE7.click();
我只是觉得它更容易理解你想要做的元素。

我一直在使用GeckoDriver一段时间,并与该地区的一些有经验的人交谈,他们告诉我Gecko有许多问题尚未解决。
他们总是建议我不要使用GeckoDriver,因为它似乎经常失败,并告诉我使用FirefoxDriver。
要尝试这种方式,这很重要,您只需要继续使用旧版本的Firefox作为与FirefoxDriver兼容的版本46(该版本适用于我,您可以从类似下载的地方下载) this)并避免使用GeckoDriver。 此外,版本47似乎与FirefoxDriver一起工作,因为我发现了here
记住:当你安装Firefox的这些早期版本中的一个,不要忘记去设置和禁用自动更新和后台更新,因为如果你不这样做,你会很快再次与最晚结束需要GeckoDriver的版本。

此外,您可以尝试一些验证如下所示:

if(WE7.isDisplayed() && WE7.isEnabled()){ 
    WE7.click(); 
} 

这种验证会在该页面没有完全在你试图采取瞬间加载的情况下帮助对网页元素的操作。如果元素还没有准备好,你会点击它没有错误,但它只是将无法正常工作

希望这也适用于你!

+1

修好了,谢谢! – ferpel

+0

嘿谢谢 - 我要试试这个。我需要一些时间来尝试一下 - 会尽快找到你所有的结果。 –

+0

不客气!慢慢来! – ferpel