【问题标题】:Trouble with Selenium, Java, Screenshots and clicking buttonsSelenium、Java、屏幕截图和单击按钮的问题
【发布时间】:2017-02-15 13:19:52
【问题描述】:

这是另一个关于 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

感谢您的帮助!!!

【问题讨论】:

  • 假设点击登录按钮的语句是WE7.sendKeys(Keys.ENTER),你为什么要向按钮发送回车键而不是像user_login_name和@那样调用click() 987654326@ 字段?我不一定说这是错误的(我不知道也没有检查),但我只会click() 它。另外,为什么在user_login_nameuser_password 字段上调用click()?给他们sendKeys
  • 嗨 SantiBailors - 这只是一种演变。我试过 click() 但这没有用。我在网上其他地方看到了这个提示,所以我试了一下。它可以工作 - 也就是说,它不会产生任何问题,但屏幕截图仍然不正确,这意味着点击没有发生。谢谢!!!

标签: java button selenium-webdriver click


【解决方案1】:

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

WE7.click();
我只是认为更容易理解您要对元素执行的操作。

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

此外,您可以尝试以下验证:

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

如果您尝试对 Web 元素执行操作时页面未完全加载,这种验证会有所帮助。如果元素未准备好,您将单击它而不会出错,但它不会工作

希望这对你也有用!

【讨论】:

  • 嘿,谢谢 - 我要试试这个。我需要一些时间来尝试一下 - 会尽快给大家回复结果。
  • 嘿 ferpel - 我需要更多帮助 - 可能是因为我很愚蠢。我查看了在我的机器上运行的 Firefox 版本——它的 Mozilla Firefox 45.6.0。 (我在 Debian-Wheezy 服务器上运行。
  • 对不起 - ...所以看到这是旧版本 46,我决定尝试一下您的建议。我注释掉了系统设置属性行,因为找不到firefox,所以无法运行。因此,我只是将设置它的行复制到 /usr/bin/firefox - 认为它是指向 firefox 可执行文件。这也没有奏效。如何强制我的 Selenium 3 java 程序反对 firefox 而不是 geckodriver?
  • 您需要代码行才能进入 firefox 并运行它,只要确保您没有调用 gecko。写 WebDriver driver = new FirefoxDriver(); 而不是 System.setProperty("webdriver.gecko.driver", "C:\\Selenium\\geckodriver.exe");
  • 嘿 ferpel - 干得好。我能够关闭 geckodriver 并使用 firefox 45.6.1 可以完成点击。我添加了以下代码行,替换了壁虎的 System.setProperty:DesiredCapabilities capabilities = new DesiredCapabilities() 然后capabilities.setCapability("marionette", false); 然后WebDriver driver = new FirefoxDriver(capabilities);
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2014-08-25
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多