这是关于Selenium和点击的另一个问题。我已经苦苦挣扎了两天而无法让它发挥作用 - 我已经在互联网上尝试了答案,现在我需要齐心协力。在此先感谢!!
我正在使用以下网站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-Wheezy-64-LAMP
我的Selenium库来自client-combined-3.0.1-nodeps.jar
我的Geckodriver是v0.11.1-linux64
感谢帮助!!!
答案 0 :(得分:1)
嗨,我不知道它是否会导致问题,但无论如何我会使用
WE7.click();我觉得它更容易了解你要对元素做些什么。
我一直在与GeckoDriver合作一段时间并与该地区的一些有经验的人交谈,他们告诉我Gecko有许多问题尚未解决。
他们总是建议我不要使用GeckoDriver,因为它似乎经常失败并告诉我使用FirefoxDriver。
要以这种方式进行尝试,这很重要,您只需要继续使用旧版本的Firefox作为与FirefoxDriver兼容的版本46(该版本适用于我,您可以从类似的地方下载它this)并避免使用GeckoDriver。
此外版本47似乎与FirefoxDriver一起使用,因为我找到了here
请记住:当您安装其中一个以前版本的Firefox时,请不要忘记转到设置并停用自动更新和后台更新,因为如果您不这样做,那么您将会这样做最新版本需要使用GeckoDriver。
此外,您可以尝试进行以下验证:
if(WE7.isDisplayed() && WE7.isEnabled()){
WE7.click();
}
如果您尝试对网络元素采取操作时页面未完全加载,则此类验证会有所帮助。如果元素没有准备好,你将点击它没有错误,但它只是赢得了工作
希望这也适合你!